微服务实战 01 微服务的发展史
参考《Spring Cloud Alibaba 微服务原理与实战》
微服务的发展史
单体架构、垂直化和集群 -> SOA(面向服务架构)-> 维护服务架构
单体架构
这个系统架构非常简单,如果一个war包或者jar包里包含了一个应用的所有更能,则我们称这种架构为单体架构。这种架构的有点就是,能够快速开发和上线。
集群及垂直化
单体架构不能支撑业务的正常运行,可以有两个方面进行优化:
-
通过横向增加服务器,把单台机器变成多台机器的集群
-
按照业务垂直领域进行差分,减少与的耦合度,降低范围war包的伸缩行困难
将系统进行了垂直拆分:用户子系统、库存子系统
商品子系统,每个子系统有不同的业务团队负责独立部署
SOA 面向服务架构
是一种软件组建及开发的方式。核心目标是把一些通用、会被多个上层服务调用的共享业务提取成独立的基础服务,这些被提取出来的共享服务相对来说比较对立,并且可重复使用,在SOA中,服务是最核心的抽象手段,业务被划分为一些粗粒度和业务服务和业务流程。
在SOA中,会采用ESB(企业服务总线)来作为系统和服务之间的通信桥梁,实现了服务的调用者和服务的提供者之间的高度解耦
SOA主要解决了:
- 信息孤岛
- 共享业务的重用
微服务架构
面向服务(SOA)和微服务本质上都是服务化思想的一种体现,如果SOA是面向服务开发思想的出行,那么微服务就是针对可宠用业务服务的更进一步优化,我们可以把SOA看成微服务的超集,也就是多个微服务可以组成一个SOA服务。
由于SOA和微服务两者的关注点不一样,造成了两者有很大的却别:
- SOA关注的是服务的重用性及解决信息孤岛的问题。
- 微服务关注的是解耦,虽然解耦和可重用性从特定的角度来看是一样的,但本质上是有区别的,解耦是降低业务之间的耦合度,而重用性关注的是服务的复用。
- 微服务会更多地关注在DevOps的持续交付上,因为服务力度细化之后是得开发运维变得更加重要,因此微服务与容器化技术结合的更加紧密
微服务的优点
- 复杂度可控:因为体积小、复杂度低,开发和维护会更加简单
- 技术选型更加灵活:每个服务有不同的团队来维护,所以可以结合业务自由选择技术栈
- 可扩展性更强:可以根据每个微服务的性能要救和业务特点来对服务进行灵活扩展
- 独立部署:由于每个微服务都是一个独立运行的进程,所以可以实现独立部署
- 容错性:某一服务发生故障,我们可以是故障隔离在单个服务中
微服务的挑战
- 故障排查: 交互的链路比较长,定位问题根源比较困难
- 服务监控:服务监控开销比较大
- 分布式架构的复杂性:分布式系统设计服务之间的远程通讯,从而增加了应用程序的复杂度。
- 服务依赖:各个服务中之间存在更多的依赖关系,是系统整体各位复杂
- 运维成本: 在微服务中,需要保证几百个微服务的正常运行,对运维来说挑战是巨大的
微服务的架构图
- 分布式配置中心
- 服务路由
- 负载均衡
- 熔断限流
- 链路监控
这些都需要对应的技术来实现
spring cloud
spring cloud 提供了让开发者快速构建微服务应用的工具,比如**配置管理、服务发现、熔断、智能路由等
spring cloud 主要致力于解决如下方案:
- 服务的注册与发现: Service registration and discovery
- 服务路由 Routing
- 服务调用 Service-to-service calls
- 负载均衡 Load balancing
- 断路器 Circuit BreaKers
- 全局锁 Global locks
- Leader选举及集群状态 Leadership election and cluster state
- 分布式消息 Distributed messaging
spring Cloud Alibaba
spring Cloud Alibaba 为微服务提供了一站式解决方案,使开发者通过Spring Cloud 编程模型轻松地解决微服务架构下的给雷技术问题, 他包含以下主要功能组件
- Sentinel 流量控制和服务降级
- Nacos 服务注册月发现
- Nacos 分布式配置中心
- RocketMQ 消息驱动
- Seate 分布式事务
- Dubbo RPC通信
- OSS 阿里云对象存储