<div id="js_content">
<p style="text-align: center">点击上方码猿技术专栏 轻松关注,设为星标!<br></p>
<p style="text-align: center">及时获取有趣有料的技术</p>
<p style="text-align: center"><img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-d2b39395f53edc04dc923b7d65ba34e5.png"></p>
<p>随着互联网的发展,后端服务和容器编排技术的日益成熟,微服务成为了后端服务的首选,Kubernetes 也已经成为目前容器编排的事实标准, 微服务拥抱容器时代已经来临。笔者结合自己的经验,写了这篇微服务+ Kubernetes 入门宝典,希望能够抛砖引玉。能让大家了解 微服务和 Kubernetes 如何配合。上卷主要描述 微服务设计,项目实现,kubernetes 部署,微服务的部署 高可用和监控 这几个部分。下卷计划讨论服务化网格和数据持久化, 有状态服务,operator 这几部分。本文由我独立完成(ppmsn2005#gmail.com)如有任何错误,是我个人原因,请直接和我联系,谢谢!<br></p>
<p>本文会从设计开始,设计一个简单的前后端分离的项目,并将它部署在 kubernetes 集群上,期间我们将关注微服务和 kubernetes 配合的各个方面,并且从 系统的可用性,可靠性、强壮性、可扩展进行讨论,最终设计一个可以真正实用的系统。</p>
<p>整体上我们从4个章节描述这个目标,分别是:</p>
<p>第一章:微服务项目的设计</p>
<p>第二章:微服务项目的具体实现</p>
<p>第三章:kubernetes的部署</p>
<p>第四章:微服务高可用部署及验证</p>
<blockquote>
<p>微服务是一种设计思想,它并不局限于任何开发语言,在本例中我们选择java的spring boot 框架来实现微服务。微服务之间的 RPC 方案也很多,我们这里选择RESTFUL 这种最常见的方案。为了项目的简洁,项目也没有涉及数据库和缓存,配置中心相关的内容。我们主要注重项目的设计思想实践和项目改进。</p>
</blockquote>
<h2>第一章:微服务项目的设计</h2>
<h3>1.1 微服务设计的思想</h3>
<p>首先我们简单地回顾一下微服务,微服务的定义当来自 Martin flowerler https://martinfowler.com/articles/microservices.html 一文,借用大佬的一张图 描述了微服务最本质的东西。</p>
<img height="363" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-c2f204723ea7e668e08662d6c4ab2fc0.png" width="778">
<p>微服务把各个功能拆开了,每个模块的功能更加独立,也更加单一。每个模块都独立发展,可以说做到了功能的高内聚,低偶合。</p>
<img height="444" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-d3ab9a71cb00c89f338c1a058518b721.png" width="758">
<p>再借一张,这样数据库也被彻底拆分开了。一个巨大复制的单体数据库也按照功能拆成了小的独立数据库。</p>
<p>微服务就是这么简单吗?当然不是,里面有很多细节需要考虑,纸上得来终觉浅,绝知此事要躬行。这次让我们开始从0开始真正的设计整套系统。</p>
<h3>1.2 实践设计和改进</h3>
<p>现在我们要设计一个最简单的微服务架构。为了更贴近真实的业务。我们假设这个系统是这样的。</p>
<img height="65%" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-dbc4fddd8d4d7b77349046b376179bd1.png" width="65%">
<p>整个系统的前端是一个有着前后端分离站点,用户访问了www.demo.com 这个前端站点,通过前端页面发起请求,www.demo.com 服务器将请求发往a.demo.com. 然后a.demo.com 再请求b.demo.com ,b.demo.com 再请求 c.demo.com。c.demo.com 将结果返回后,不断返回,最终显示在前端站点,完成微服务的全套调用流程。[ 一般业务系统 在前端和微服务直接还存在一个网关部分,网关一般用于鉴权,请求分类,监控等功能, 这里因为比较简单,所以省略了这个部分]</p>
<p>最终我们将这套架构将部署在kubernetes 上,开始真正的服务用户。</p>
<h3>1.3 改进项目</h3>
<p>从图一我们可以看到这是一个非常简单而单薄的架构,存在很多问题,我们需要不断地解决它们。下面我们开始改进项目。</p>
<p>首先,我们要解决节点的可靠性。在图一所有的节点都只有一个实例,任何节点的崩溃都将造成项目无法运行,在真正的项目中这是不可接受的。怎么解决呢?当然是多个实例</p>
<h4>1.3.1 加入多实例及注册中心</h4>
<img height="60%" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-88ac65782ae2cee03740c8cc961bd90e.png" width="60%">
<p>我们将各个模块的实例数目增加,多个实例才能保证整个系统的可靠性。如果一个实例有问题,我们还是可以其他相同的实例进行服务。</p>
<p>但是多个 |
|