微服务架构体系
AI全套:Python3+TensorFlow打造人脸识别智能小程序
最新人工智能资料-Google工程师亲授 Tensorflow-入门到进阶
黑马头条项目 - Java Springboot2.0(视频、资料、代码和讲义)14天完整版
作者:lyf687 | 来源:llc687.top/123.html
前段内部听了下分享 Service Mesh。做一些总结
架构的演进
这种东西有点信雅达,没什么绝对标准
其实这时已经能算一种“微服务”了,一般会使用SpringBoot
弹性流动计算:服务越来越多,容量评估,资源的使用等问题逐渐显现,需要调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的 资源调度和治理中心(SOA 面向服务架构) 是关键。 微服务:最后是通俗含义的微服务,使用 SpringCloud编码,使用Docker、K8S等,解决微服务软运维问题。
微服务和SOA
微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响,不再需要协调其它服务部署对本服务的影响; 微服务提供的接口方式更加通用化,如HTTP RESTful,各种终端都可以调用,无关语言、平台,所以技术可以更随意,只需要提供API 微服务更倾向于分布式去中心化的部署方式,数据的去中心化,也可以使用更不同的数据库技术; 微服务运维使用docker,k8s 可以自动化部署,集中管理。 SOA 微服务 服务粒度 粒度较粗 细粒度拆分 部署难度 需要重新创建或者部署整个应用 每个微服务可以独立构建部署 通信开销 大部分业务模块在一个应用里面,通信开销低 更多的远程调用,增加了通信开销 存储 一般所有服务共享数据存储 每个可以拥有单独的存储 业务易上手 需要了解整个应用的业务,上手较难 单服务上手容易,但是服务集群理解比较难(复杂度守恒定律:业务复杂度不会因为迁移到了微服务而降低) 通信方式 SOA体系结构依赖于消息传递(AMQP,MSMQ)和SOAP作为主要的远程访问协议,协议偏重量级; 使用轻量级协议,如HTTP/REST 可扩展性 难以扩展 使用容器技术很方便扩展
微服务和分布式
微服务关注的是服务拆分力度,即:一个服务要拆分到多大的维度合适
Spring Cloud 和 Dubbo
说到微服务,两大框架的讨论肯定跑不了
区别
定位
Dubbo 是 SOA 时代的产物,关注点主要在于服务的调用,流量分发、流量监控和熔断,定位服务治理和** RPC;
服务发现
对于服务发现而言,可用性比数据一致性更加重要,AP 胜过 CP,而 Eureka 设计则遵循 AP 原则。
传输方式:
Dubbo底层用Netty这样的NIO框架,基于TCP协议传输的,配合以Hession序列化完成RPC通信; SpringCloud基于Http协议+rest接口调用远程过程的通信, 相对来说,Http会有更大的报文,占的带宽也更多。但是REST相比RPC更灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适,至于注重通信速度还是方便灵活性,具体情况具体考虑。
模块区别:
架构 SpringCloud
流程:
请求统一通过 API 网关(Zuul)来访问内部服务。 网关接收到请求后,从注册中心(Eureka)获取可用服务。 由 Ribbon 进行均衡负载后,分发到后端具体实例。 微服务之间通过 Feign 进行通信处理业务。 Hystrix 负责处理服务超时熔断。 Turbine 监控服务间的调用和熔断相关指标。
架构 Dubbo
Spring Cloud 和 K8s
微服务关注什么
区别
kubernetes,在Istio还没出来以前,只能提供最基础的服务注册、服务发现能力(service只是一个4层的转发代理),istio出来以后,具有了相对完整的微服务能力。
spring cloud,除了发布、调度、自愈这些运维平台的功能,其他的功能也支持的比较全面。
Service Mesh
介绍
可以将它比作是应用程序或微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。
Isito
从上面表格中可以看到,如果从功能层面考虑,Spring Cloud与Service Mesh在服务治理场景下,有相当大量的重叠功能,从这个层面而言,为Spring Cloud向Service Mesh迁移提供了一种潜在的可能性。
服务网格
服务网格从总体架构上来讲比较简单,不过是一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成。
更进一步地说,服务网格是一个专用的基础设施层,旨在“在微服务架构中实现可靠、快速和安全的服务间调用”。它不是一个“服务”的网格,而是一个“代理”的网格,服务可以插入这个代理,从而使网络抽象化。
相互连接的 sidecar 代理集实现了所谓的数据平面,这与用于配置代理和收集指标的服务网格组件(控制平面)形成对比。
总而言之,Service Mesh 的基础设施层主要分为两部分:控制平面与数据平面。当前流行的两款开源服务网格 Istio 和 Linkerd 实际上都是这种构造。
控制平面 数据平面
服务网格带来的变化
第一,微服务治理与业务逻辑的解耦。服务网格把 SDK 中的大部分能力从应用中剥离出来,拆解为独立进程,以 sidecar 的模式进行部署。
第二,异构系统的统一治理。不同语言、不同框架的应用和服务,能够统一管控
技术优势
可观察性。 服务网格是一个专用的基础设施层,所有服务间通信都要通过它,它在技术堆栈中处于独特的位置,以便在服务调用级别上提供统一的遥测指标。这意味着,所有服务都被监控为“黑盒”。 服务网格捕获诸如来源、目的地、协议、URL、状态码、延迟、持续时间等线路数据。本质上等同于 web 服务器日志可以提供的数据,但是服务网格可以为所有服务捕获这些数据,而不仅仅是单个服务的 web 层。存储与分析这些数据则需要额外能力的机制的补充,然后作用于警报或实例自动伸缩等。 流量控制。 通过 Service Mesh,可以为服务提供智能路由(蓝绿部署、金丝雀发布、A/B test)、超时重试、熔断、故障注入、流量镜像等各种控制能力。 由于服务网格的设计目的是有效地将来源请求调用连接到其最优目标服务实例,所以这些流量控制特性是“面向目的地的”。这正是服务网格流量控制能力的一大特点。 安全。 平台独立: Istio 是独立于平台的,旨在运行在各种环境中,包括跨云、内部部署、Kubernetes、Mesos 等。 集成和定制: 策略执行组件可以扩展和定制,以便与现有的 ACL、日志、监控、配额、审计等方案集成。
复杂度。服务网格将 sidecar 代理和其它组件引入到已经很复杂的分布式环境中,会极大地增加整体链路和操作运维的复杂性。 运维人员能力。 延迟。从链路层面来讲,服务网格是一种侵入性的、复杂的技术,可以为系统调用增加显著的延迟。 适配。服务网格的侵入性要适应高度自治的平台并遵守平台的规则。
小结
参考
微服务架构发展和趋势
SpringCloud和Dubbo
SpingBoot+K8s搭建环境
[serviceMesh服务网格]
全栈架构社区交流群
「全栈架构社区」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。
看完本文有收获?请转发分享给更多人
往期资源: