新一代的微服务架构 Service Mesh
博客原文地址 (https://elfgzp.cn/2020/06/21/新一代的微服务架构 Service Mesh
由于最近在工作中在做 Service Mesh 的落地项目,有非常多的感触,所以想写一篇文章来分享这个「新一代的微服务架构 Service Mesh」。
笔者会从以下顺序开始分享:
- Part 1 从「单体应用架构」到「微服务架构」开始说起
- Part 2 从「Docker」到 「K8s」
- Part 3 从「边车模式」到「服务网格」
- Part 4 用「Istio Demo」来讲一个实际的应用场景
首先会从 「单体应用架构」 演进到 「微服务架构」 产生的问题开始说起,到自己作为开发人员感触最深的痛点。
然后简单介绍以下今天的主角 Istio 的服务编排环境 Kubernetes。
最后从 Sidecar 这种设计,说到 Service Mesh,最后到我们的主角 Istio。
到正式的主角之前的铺垫会比较多,这是为了让大多数开发者都能理解。
本文大部分内容都整理自笔者的学习资料加上自己的一些总结和体会,大家最后可以从文末找到他们。
Part 1**「单体应用架构」到「微服务架构」开始说起**
1.1 单体应用架构与微服务架构对比
从**「单体」到「分布式」**演进(也就是微服务化)的原因我相信大家都很了解了。
因为业务量越来越大,我们需要多台机器才能应对大规模的应用,所以需要垂直或者水平拆分业务系统,让其变成一个分布式的架构。

从上面的表格我们可以看到,分布式系统虽然有一些优势,但也存在一些问题。
- 架构设计变得复杂。
- 部署单个服务会比较快,但是如果一次部署需要多个服务,流程会变得复杂。
- 系统的吞吐量会变大,但是响应时间会变长。
- 运维复杂度会因为服务变多而变得很复杂。
- 架构复杂导致学习曲线变大。
- 测试和查错的复杂度增大。
- 技术多元化,公司中可能会有多个技术栈,这会带来维护和运维的复杂度。
- 管理分布式系统中的服务和调度变得困难和复杂。
作为业务开发人员最直观的感受:
- 接口为什么这么慢,明明只依赖了一个服务。我需要更新我的服务,但是哪些服务依赖了我的服务,这次更新会对哪些服务造成影响。
- 我需要在代码框架层编写客户端接入监控、日志、链路追踪、告警、健康检查等各种各样非业务相关的代码。
- 测试很不方便,测试一个服务需要所有依赖的服务,测试环境资源紧张。
- …
1.2 微服务架构的痛点和需要解决的问题
总结来说,微服务架构有这些痛点和需要解决的问题:
- 服务多,服务之间的依赖难以管理。
- 服务之间的版本管理,不同版本的服务可能会有兼容性的问题。
- 需要对整体架构监控,快速发现问题。
- 资源调度管理。
- 需要做流量控制。负载均衡、服务路由、熔断、降级、限流、灰度发布等流量相关的控制。

图片引用自 《左耳听风 - 分布式系统技术栈》
针对这么多的需要去解决和处理的问题。
引出了我们今天的主角 Istio。
在介绍我们今天的主角 Istio 之前,先简单介绍一下它的服务编排环境 Kubernetes。通过 Docker 以及其衍生出来的 Kubernetes 之类的软件或解决方案,大大地降低了做上面很多事情的门槛。
Part 2**「Docker」到 「K8s」**
2.1 Docker 容器的本质
Docker 相信大家都非常了解了,所以这里我就从 Docker 过度讲到 k8s。
Docker 容器这个听起来玄而又玄的概念,实际上是在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。这样,容器就只能**“看”**到当前 Namespace 所限定的资源、文件、设备、状态,或者配置。而对于宿主机以及其他不相关的程序,它就完全看不到了。
int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCH
微服务架构与ServiceMesh

最低0.47元/天 解锁文章
133

被折叠的 条评论
为什么被折叠?



