首页 > 热点

微服务架构云端应用

微服务的架构模式1 一体化架构模式传统mvc架构,也是一体化模式。2 聚合模式从多个服务的结果聚合到一个聚合服务,最常见的表现是聚合

作者:豆浆油条 | 2016-12-26 17:09:55

微服务的架构模式


1. 一体化架构模式

81557876771bd0fe99ec9e22466eaf1b_meitu_1.jpg

传统mvc架构,也是一体化模式。


2. 聚合模式

21fdcd08aa047cdfcb78c68b6bc1a8db_meitu_2.jpg

从多个服务的结果聚合到一个聚合服务,最常见的表现是聚合服务是Web服务,主要功能是页面表现,后端的服务都是纯业务功能服务,扩展业务只需要增加一个新的后端微服务就可以啦。


聚合服务也可以是一个更高层次的组合微服务,增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。这个模式是最常用模式。


3. 代理模式


f4247b2f89a8a16650fb4da03ddcc27a_meitu_3.jpg

4. 资源共享模式

f6659f07a209f6ed07e501d892d03a7f_meitu_4.jpg

可实现部分业务的逻辑分离,数据共享。


用在一体化架构往微服务架构迁移过程中的过度状态。还可用在两个服务之前有数据一致性要求,通过统一的数据库事物来实现。


5. 异步消息模式

bee84ad009d4751dae635d3ec24eeb60_meitu_5.jpg

上面的其它模式都是同步的,会阻塞。异步消息模式适合不需要同步的场景,比如任务型服务。


主要的模式就这些,其它模式可以由这些模式演变。


大量微服务带来的挑战


1. 服务部署的挑战


每个服务都需要独立的代码管理、版本管理、编译构建、部署到测试环境,部署到生产环境,代码回滚等等事情,如果要有几十个服务要部署,人工管理几乎不可能完成。


2. 服务绅缩的挑战


无状态服务需要配置负载均衡和增加节点,有状态服务需要扩充单个服务的资源,如果需要减少资源浪费,需要监控每个服务,还需要减少节点和资源。


3. 服务高可用的挑战


每种服务的高可用策略都不一样,无状态服务相对简单,管理每个有状态服务都是难题。


4. 服务容错的挑战


任何一个服务的可用性都不是 100% 的。在分布式系统中,当我依赖的某个服务不可用的时候,我自身也将不能工作。如果是一个复杂的分布式系统,会依赖更多服务,任何一个服务不可用的时候,系统自身也将不能工作,再加上网络不稳定的因素,系统自身的可用性将大幅度下降。


5. 依赖关系的挑战


依赖配置文件,如果写在代码中,需要重新部署才能生效,而配置文件还会污染代码。


6. 服务监控的挑战


监控cpu?负载?大量微服务如何同时监控?



微服务在好雨云的解决方案


底层是通过docker实现的,只是用户感受不到docker。

内部封装,不用管理计算资源和网络资源,并把某些复杂特性包装在内部。整体对外,服务做为一个整体管理。


34f8b3a2f5cce2500ec736026b81de01_meitu_6.jpg

开发语言支持Java、Python、PHP、Ruby、Golang,Node.JS等,代码支持Github,好雨托管仓库。


bf0c997e23348ed442391e054fc18d4f.jpg

水平伸缩用于无状态的 Server和Worker 类的服务。


垂直伸缩用于有状态的服务。


部分有状态服务支持水平分区( sharding),用户只需要调整节点个数就可以了。


badab9f01ffd55303b37a7b3d4da94e0.jpg

一般通过LB支持无状态服务高可用,支持有状态服务高可用。


effdb227c31688205f050cb934d4c6a9.jpg

类似Spring,参数通过环境变量实现。


实现微服务之间的连接和编排,以上微服务模式都可以通过这种方式动态配置实现。


9c06a35508e893c03a122db44c5ec609.jpg

类似保险丝,当服务B变慢,达到断路器的阀值,服务B,将自动下线,不至于影响其他服务,当延迟变小,服务逐步恢复。容错还有一种方式是使用异步,可以参考CQRS模式。


007814950268f11026a5b6e12ffc7cfa.jpg

业务指标:平均响应时间,吞吐率 ,在线人数。

在实际场景中,使用业务监控可以替代技术监控,而且更加简单容易理解。

3dbfd0ec229872a94c8f0805bfac8e63.jpg


3ae80b91e9afc506c81215fa78e33ef2.jpg

单个REST服务的实时性能分析,数据库性能分析,最慢的Sql语句不一定是对数据库影响最大的。实时性能分析通过CEP+log实现,以前工作一直使用,没有APM炫,但解决了很多实际问题。还在实现了Mongodb ,Redis等数据存储的实时性能分析。


至此,相信你也对微服务,微服务的构架模式以及微服务在现实场景中的应用有了一个大概的认识了。


文章来源【中生代技术】

【责任编辑:豆浆油条】