云原生时代微服务架构设计与实践
1. 微服务与云原生概述
在云原生时代,微服务开发框架变得至关重要。例如,有一个强大的微服务开发框架,它提供了许多具备服务治理能力的组件,具体如下:
- Eureka:用于服务注册和发现。
- Zuul:负责请求路由和充当网关。
- Ribbon:实现负载均衡。
- Hystrix:进行熔断和容错管理。
这个框架几乎能满足我们所有需求,但本质上它仍以库的形式运行。要赋予系统这些治理能力,需要在代码或配置层面引入这些组件并打包部署,这涉及一定的学习成本和维护工作。传统引入服务治理的方式是实现功能、集成(修改代码或配置)并进行维护。
在云原生环境中,服务治理尽可能由基础设施承担。比如,将应用容器化并交给Kubernetes等编排工具管理后,服务注册和发现问题就能得到解决。为每个服务添加一个名为Service的对象,它会自动为应用分配虚拟IP地址(VIP),以便在集群内访问。服务之间只需通过Service对象的名称就能相互访问,服务发现由Kubernetes的DNS服务处理。同时,Service对象后面可以匹配多个应用实例(Pods),通过kube - proxy实现负载均衡,这些操作都无需对应用进行代码级更改,对应用是透明的。我们的关注点也会转向如何定义Service对象、如何暴露服务等。
不过,在某些情况下也存在缺点。当应用部分迁移到云端,这些服务交给Kubernetes集群管理后,需要与遗留系统交互,跨集群访问会带来技术难题,需要付出努力去解决。
2. 部署和发布的变化
软件开发生命周期中,问题不会因工具、技术和架构的变化而消失。迁移到微服务架构