微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。
微服务可以在"自己的程序"中运行,并通过"轻量级设备与HTTP型API进行沟通"。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。
喜
迎
新
春
微服务系统架构集成与服务规划微服务集成微服务的集成做到好,可以保持自治性、可以独立发布修改和发布。 1、集成原则1)避免破坏性修改服务的一些修改不能导致该服务的消费方发生改变。2)保证API与技术的无关性3)保证API的易用性4)隐藏内部实现细节2、同步与异步同步:调用方发起远程服务调用后,调用方阻塞自己并且等待服务方的返回。异步:调用方不需要等待服务方返回,甚至可能不关心这个操作完成与否。
3、编排与协同
编排:同步调用一组服务,等待各个服务的返回结果。优点知道业务流程中每一步跨服务调用结果,缺点容易承担太多的调用,太耗时,导致调用方的不稳定性。
协同:异步调用一组服务或服务调用加入队列中,降低服务之间的耦合度,带来的额外工作业务流程跨服务的监控,不过可通过消费方处理完成后,回调服务方告知处理结果。
4、版本管理
1)尽可能推迟破坏性修改
宽进严出的原则
2)尽早发现破坏性的修改
按照契约,通过测试及早发现是服务方还是消费方破坏性的修改
3)不同的接口版本共存最好共存两个版本
微服务规模化1、故障无所不在
网络是不可靠,只能尽力限制引起故障的因数,达到一定规模后,故障不可避免。
2、跨功能需求
服务吞吐量、可用性和数据持久性等这些需求需要持续测量,并保证服务满足可接受的目标。
3、功能降级
构建弹性系统,因微服务功能分散,在有可能down机的微服务上,能够安全的降级以保证弹性
4、反服务脆弱
为了不会引起严重级联影响,需要正确的设置超时、实现舱壁隔离或断路层等以避免在第一时间调用一个不健康的服务。
1)超时
设置超时时间对于调用下游服务十分重要,超时时间设置太长有可能把下游系统拖慢,设置太短可能下游服务未处理完成。最好设置一个默认的超时时间,当超时发生时后,记录到日志里看看发生了什么,并且做响应的调整。
2)断路器
使用断路器,当请求下游服务发生一定数量的失败后,短路器打开,接下来的请求快速失败。一断时间后,查看下游服务是否已服务,重置断路器。
3)舱壁
未每个下游服务建立单独的连接池。超时和断路器资源受限时释放资源,舱壁第一时间确保它不成为限制。还有一个拒绝请求的舱壁,用以避免资源饱和,称之为减载。
4)隔离
当下游服务离线,上游服务不受影响。设置成为服务间隔离。
5、幂等
幂等操作,多次执行所产生的影响,均与一次执行影响相同。可以把某些特定业务操作设计成幂等的,比如客户下单送积分。
6、扩展
增加负载、减少延迟。
1)更强大的主机:垂直扩展,更好的机器。
2)拆分负载:按业务拆分成不同的微服务
3)分散风险:数据跨机房,异地备份等
4)负载均衡:避免服务单点故障
5)作业分离:Job独立服务执行
6)重新设计:一般设计系统需要考虑10倍容量增长。重新设计系统应对规模化,是成功的标志。
7、扩展数据库
1)服务的可用性
2)服务的持久性:多副本
3)读取数据扩展:读写分离
4)写操作扩展:分表分库
5)共享数据库设施:容易形成单点故障
6)CQRS:命令查询职责分离
8、缓存
通过存储之前的操作结果,以便后续请求使用这个结果,而无需花重新计算或查询。
1)客户端缓存
客户端缓存获取的结果,客户端决定何时获取新副本。一般是有下游服务提供缓冲的过期时间。客户端缓存可以减少网络调用次数,并且减少下游服务负载的最快方法之一,客户端缓存数据,让数据失效需要做额外的工作。
2)服务端缓存
服务端来负责处理缓存,容易跟踪和优化缓存的命中率。
3)代理服务器缓存
缓存在服务的和客户端之间,比如方向代理或CDN等。对一切客户端和服务端不透明
4)HTTP缓存5)为写使用缓存
先写入本地缓存,之后某个时刻将数据写入下游的,可能更规范化的数据源中。
6)为弹性使用缓存
下游服务不可用,客户端可以缓存可能失效的数据。
7)隐藏源服务
保护源服务,不直接暴露源服务。如果缓存不命中,立即失败,异步重建缓存。
8)保持简单
避免太多地方使用缓存,缓存越多,数据越可能失效,就越难保证数据的新鲜程度。
9、自动伸缩
响应型伸缩、预测型伸缩
10、CAP定理
在分布式系统中有三方面需要彼此权衡:一致性、可用性和分区容忍性。这个定理告之我们最多只能能保证三个中的两个。CA系统在分布式系统中根本不存在。
11、服务发现
1)DNS
2)动态服务注册:zookeeper、redis、consul
12、文档
接口文档的重要性。
领取专属 10元无门槛券
私享最新 技术干货