10.6 基础服务
基础服务分为四部分,分别是配置中心、安全数据服务、数据存储服务、订单服务,如图 10.7 所示。基础服务大多和存储有关,提供高性能、高可用的服务。
10.6.1 配置中心
配置中心提供高可用的配置数据存储服务,几乎所有的应用和服务都依赖配置中心。配置中心主要解决基础数据和配置数据的单点依赖及节点之间的数据同步问题,以便更好地支持各个服务的水平伸缩。配置中心可以配置主键、索引字段、唯一约束、每个字段的类型约束等,其功能类似于数据库,开放全量和变量的同步接口,提供多语言的客户端 SDK,同步全量或变量数据,根据服务端的配置,在内存中建立数据索引,缓存数据,并在本地文件中持久化缓存的备份,如图 10.8 所示。
一个依赖配置中心的服务,在启动时会先查找本地文件中有没有配置数据的缓存,如果有,则从文件中加载配置数据到内存中,启动服务,接着调用变量接口对比本地数据和配置中心的数据是否是同一版本,如果数据有变化,则更新数据到本地缓存。如果本地文件中没有配置数据的缓存,则先调用一次全量接口缓存所有配置数据到本地缓存。即使配置中心的所有节点都无法运行,也不影响各个依赖它服务的现有节点的正常工作。
因为每个服务都会缓存依赖的配置数据,所以对配置中心的性能要求不是太高,我们用 AWS RDS 来解决配置数据存储的高可用问题。AWS RDS 是一个托管关系数据库服务。
10.6.2 安全数据服务
高可用的安全数据服务提供数据加密和解密服务,定时清理过期的数据,解决敏感数据的安全临时存储和传输问题,比如银行卡和信用卡信息的临时存储和传输。需要传输敏感信息时,在数据传输方调用数据加密服务的加密接口,并明确信息有效时间,加密服务会将信息加密后存储,并返回一个全局唯一 ID,数据传输方发送这个唯一 ID 给数据接收方,如果数据接收方收到这个 ID 之后,调用数据解密接口,则加密服务会根据 ID 找到相应的数据,返回解密之后的数据。
10.6.3 数据存储服务
Dstorage 提供高可用的酒店动态数据存储服务,可以解决酒店海量动态数据存储问题,提供高性能的数据存取接口,提供变量数据的同步接口。根据性能和容量需求,用户可选的存储引擎有 Redis、Codis、Ardb、DynamoDB 等。DStorage 支持多可用区部署,通过变化发现服务,实现多可用区的数据同步,保证数据最终一致性。
Dcontent 提供高可用的酒店静态数据缓存服务可以解决酒店海量静态数据的缓存问题。底层支持的存储引擎有 Ardb、Redis 等。DContent 支持一主多从多可用区部署,也支持多主多可用区部署,保证数据最终一致性。
AWS S3 提供高可用的文件存储服务,可以存储文件数据,如图片、视频、日志文件、备份数据等。
10.6.4 订单服务
由于订单数据比较特殊,所以将与订单相关的功能单独出来,作为独立服务。订单服务聚合所有系统节点的订单信息,让订单比较容易追溯,提供高可用的订单存储和查询服务,解决订单数据的单点存储问题,更好地支持其他依赖订单数据的系统进行水平扩展和迁移。订单服务对可用性要求极高,底层存储依赖 AWS RDS,在全球每个可能用到订单服务的可用区部署订单服务集群。
10.7 服务降级
根据业务要求对每个服务及其依赖的资源按重要程度进行分级,限制每个依赖服务的超时时间,定义各级服务的 SLA 指标,对强依赖的基础服务或资源实行更高的 SLA 标准,根据 SLA 指标制定容错方案。
制定服务自动降级策略,设置服务开关,关键时刻“弃车保帅”,对弱依赖的服务进行降级,比如将日志服务降级以保障重要的服务不受影响。
对超大数据或流量用户进行隔离,在隔离的环境中为这部分用户提供独立的服务,避免影响其他正常用户服务。
10.8 自动化
微服务化后,服务的数量很多,为了节约开发成本,必须尽可能地自动化完成一些有固定步骤的工作,如自动化测试和自动化部署,如图 10.9 所示。