社群云(Community cloud)也称社区云,是由几个组织共享的云端基础设施,支持特定的社群,有共同的关切事项,例如使命任务、安全需求、策略与法规遵循考量等。管理者可能是组织本身或第三方;管理位置可能在组织内部,也可能在组织外部。
社群云(Community cloud),也称社区云,是由几个组织共享的云端基础设施,它们支持特定的社群,有共同的关切事项,例如使命任务、安全需求、策略与法规遵循考量等。管理者可能是组织本身,也能是第三方;管理位置可能在组织内部,也可能在组织外部。
简介
按照云计算的部署模式,云可以分为四种,分别是私有云、社区云、公有云和混合云。私有云由单一组织独占使用。社区云是由一个特定社区独占使用,该社区由具有共同关切 (如使命、安全要求、政策等) 的多个组织组成。公有云由公众开放使用。混合云则是前述的两种以上模式的混合。
技术
身份管理与授权
在社区云的环境下,要跨机构的管理用户,要在统一身份认证和各个机构的自主性之间达成良好的平衡,做到既方便用户使用,又能在良好的授权控制前提下实现资源的高效利用。
代理授权是身份管理方面需要引起注意的问题。社区云是多机构的联合,在使用 A 机构的资源时,对用户的授权则是在 B 机构的身份管理系统中实现,这其中的代理关系是社区云模式下的一类基本场景,需要得到很好的解决。代理授权的解决方案中涉及到一些开放标准,采用的是 OAuth2,它可以支持多类应用,包括 Web、桌面和无线客户端等,并且简单方便。
认证联盟的建立是为了实现跨系统、跨机构以及多个云应用之间的协作,从身份管理角度涉及两个核心概念:身份标识的提供者 (IdP) 和服务提供者(SP)。此二者可以是完全独立的。比如中国科技网通行证,这是一个身份标识的服务,已经积累了 40 多万的用户,其中科学院的科研人员和学生占比一半左右。一些研究所自己建设和运行的用户系统也提供身份标识服务。科技云的应用服务如团队文档库、学术会议平台、科研主页,以及很多研究所的信息化服务等,都是服务提供者。当多个身份标识服务达成一致的约定,可以同时支持应用服务,就构成了认证联盟。这方面的技术也已经有基本成熟的技术标准。通过认证联盟建立统一的身份管理服务,对于推进社区云、推进不同机构之间的合作具有关键性的作用。
服务集成
在云的环境下,网络、计算、存储和数据等资源都可以包装成服务的方式,进而进行资源和服务的集成,在一些简单、基础的服务上构建出复杂、高级的服务。在社区云中,这样的服务集成更加具有普遍性,当然,这样的集成也通常是不容易的。社区云的用户特点是不仅包括一般的最终用户,还包括具有应用开发或二次开发能力的开发者用户。云平台为科研人员结合自身科研特色需求的二次开发提供基础资源,这就要求社区云提供这样的技术和支撑环境。服务集成的重要工作是面向开发者提供接口 (API)。面向服务的架构 (SOA) 已经是成熟的技术,但在服务的交互和集成方面还有一些较深层的问题。我们认为无状态化、动态迁移、服务的伸缩性这是三个关键点。面向服务集成的接口设计要尽可能地实现服务的无状化。无状态化可以大大简化后续多个服务的集成问题,同时在无状态化的基础上更容易实现动态迁移,从而实现服务的伸缩性。这些对于服务的可靠性也会大有帮助。
测量与运行管理
从云的运行来说,基于日志的一些技术和手段是非常有用的。社区云的资源提供者不是单一的管理域,服务的测量和基于日志的运行管理更为重要。社区云应有专门的日志服务为各种应用提供日志的收集、存储和分析显示等服务,并可以基于日志进行测量,进行服务的监控和管理,再通过门户进行适当的展示。测量数据及统计分析对于社区范围内用户、服务提供者群体的沟通和协调非常有帮助,也是指导我们做好运行管理的一个重要基础。
联盟
联盟 (Federation) 即服务的联盟,联盟架构里核心的角色是服务提供者。联盟意味着其中的各个实体是平等的,在此基础上建立相应的机制和系统。从国际上看,联盟的方式在学术界很流行。像科技云这样的社区云,可以将联盟的框架设定为大学、科研机构及一些科技企业,还有为科研提供服务的企业,等等。具体而言,联盟的架构有两种主要的模式:Mesh 和 Hub-and-spoke,前者是所有实体完全对等,后者是有一个 Hub 作为沟通和协调的枢纽,可以提高联盟中服务和运行的效率。
微服务
微服务架构(Microservices Architecture) 是在面向服务的基础上近年来的一个新发展。对于社区云来说,微服务具有更突出的价值。微服务强调比过去更细粒度的服务,支持大量的交互和频繁的更新。要做到微服务,对于基础设施自动化和持续集成有着高要求,并且尽量采取轻量级的通讯协议。微服务的理念是松耦合,高内聚,这也涉及到容错性设计、复杂性控制和开发运维一体化 (DevOps) 等方面的内容。
松耦合、高内聚的实现要求接口尽可能简化,并采用单独的业务逻辑。Unix 经典的管道的设计是一个范例,当前的服务则普遍采用简单的 REST 风格,而不是复杂的协议。在通信方面,尽量采用轻量级消息通信,这有利于使用不同技术所开发出来的服务进行交互。在微服务架构中,通过高效率的模块化设计,能够方便地支持多团队协作和并行开发。而且,服务之间是相互依赖的,需要进行相互的迭代,因此软件开发必须要高度的自动化,能够自动地构建软件、测试、部署、发布等。这就要求整个开发环境也是云化的,即从下层的硬件资源到上层的软件管理,都可以通过云的方式向整个社区内的成员提供。此外,微服务应该是容错的。在一个分布式的系统里面,复杂性会更高,依赖和动态更新又会带来一些问题。