设为首页 加入收藏

TOP

微服务(一)
2019-09-17 18:19:32 】 浏览:54
Tags:服务

什么是微服务架构 

        “微服务”一词源于Martin Fowler的名为Microservices的博文, 可以在他的官方博客 上找到: http://mar巨nfowler.com/articles/microservices.html。

         简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统 拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP 的RESTful API进行通信协作。 被拆分成的每一个小型服务都围绕着系统中的某一项或一 些耦合度较高的业务功能进行构建, 并且每个服务都维护着自身的数据存储、 业务开发、 自动化测试案例以及独立部署机制。 由千有了轻量级的通信协作基础, 所以这些微服务可 以使用不同的语言来编写。

与单体系统的区别

        在以往传统的企业系统架构中, 我们针对一个复杂的业务需求通常使用对象或业务类 型来构建一个单体项目。 在项目中我们通常将需求分为三个主要部分: 数据库、 服务端处 理、 前端展现。 在业务发展初期, 由于所有的业务逻辑在一个应用中, 开发、 测试、 部署 都还比较容易且方便。 但是, 随着企业的发展, 系统为了应对不同的业务需求会不断为该 单体项目增加不同的业务模块; 同时随着移动端设备的进步, 前端展现模块已经不仅仅局 限于Web的形式,这对千系统后端向前端的支持需要更多的接口模块。 单体应用由千面对 的业务需求更为宽泛, 不断扩大的需求会使得单体应用变得越来越腕肿。 单体应用的问题就逐渐凸显出来, 由于单体系统部署在一个进程内, 往往我们修改了一个很小的功能, 为 了部署上线会影响其他功能的运行。

        并且, 单体应用中的这些功能模块的使用场景、 并发 量、 消耗的资源类型都各有不同, 对于资源的利用又互相影响, 这样使得我们对各个业务 模块的系统容量很难给出较为准确的评估。 所以, 单体系统在初期虽然可以非常方便地进 行开发和使用, 但是随着系统的发展, 维护成本会变得越来越大, 且难以控制。 为了解决单体系统变得庞大脯肿之后产生的难以维护的问题,微服务架构诞生了并被 大家所关注。 我们将系统中的不同功能模块拆分成多个不同的服务, 这些服务都能够独立 部署和扩展。 由于每个服务都运行在自己的进程内, 在部署上有稳固的边界, 这样每个服 务的更新都不会影响其他服务的运行。 同时, 由千是独立部署的, 我们可以更准确地为每 个服务评估性能容量, 通过配合服务间的协作流程也可以更容易地发现系统的瓶颈位置, 以及给出较为准确的系统级性能容量评估。

如何实施微服务 

       在实施微服务之前, 我们必须要知道, 微服务虽然有非常多吸引人的优点, 但是也因 为服务的拆分引发了诸多原本在单体应用中没有的问题。

             ? 运维的新挑战:在微服务架构中, 运维人员需要维护的进程数量会大大增加。 有条 不紊地将这些进程编排和组织起来不是一件容易的事, 传统的运维人员往往很难适 应这样的改变。 我们需要运维人员有更多的技能来应对这样的挑战, 运维过程需要 更多的自动化, 这就要求运维人员具备一定的开发能力来编排运维过程并让它们能 自动运行起来。

             ? 接口的一致性:虽然我们拆分了服务, 但是业务逻辑上的依赖并不会消除, 只是从 单体应用中的代码依赖变为了服务间的通信依赖。 而当我们对原有接口进行了一些 修改, 那么交互方也需要协调这样的改变来进行发布, 以保证接口的正确调用。 我 们需要更完善的接口和版本管理, 或是严格地遵循开闭原则。

             ? 分布式的复杂性:由于拆分后的各个微服务都是独立部署并运行在各自的进程内, 它们只能通过通信来进行协作, 所以分布式环境的问题都将是微服务架构系统设计 时需要考虑的重要因素, 比如网络延迟、 分布式事务、 异步消息等。 尽管微服务架构有很多缺点和问题, 但是其实现的敏捷开发和自动化部署等优点依然 被广大优秀架构师和开发者所青眯, 所以解决这些问题就是这几年诸多架构大师努力的目 标。 在架构师对于一个大型系统架构的设计与实施的过程中, 面对环境、 资源、 团队等各 种因素的影响, 几乎不会出现完全相同的架构设计。 对于微服务架构而言更是如此, 由并没有一个标准或正式的定义,每位架构师都根据自身理解与实际情况来进行设计,并在 发展的过程中不断演化与完善。 经过多年的发展,MartinFowler在Microservices 一文中, 提炼出了微服务架构的九大特性,用于指导大家设计架构。 

服务组件化 

       组件,是一个可以独立更换和升级的单元。 就像 PC 中的 CPU、内存、 显卡、 硬盘一 样,独立且可以更换升级而不影响其他单元。 在微服务架构中,需要我们对服务进行组件化分解。 服务,是一种进程外的组件,它 通过 HTTP 等通信协议进行协作,而不是像传统组件那样以嵌入的方式协同工作。 每一个 服务都独立开发、 部署,可以有效避免一个服务的修改引起整个系统的重新部署。 打一个不恰当的比喻,如果我们的 PC 组件以服务的方式构建,那么只维护主板和一 些必要外设之后,计算能力通过一组外部服务实现,我们只需要告诉 PC 从哪个地址来获 得计算能力,通过服务定义的计算接口来实现我们使用过程中的计算需求,从而实现 CPU 组件的服务化。 这样原本复杂的 PC 服务得到了轻量化的实现,我们甚至只需要更换服务 地址就能升级PC 的计算能力。 

按业务组织团队 

       当决定如何划分微服务时,通常也意味着我们要开始对团队进行重新规划与组织。 按 以往的方式,我们往往会从技术的层面将团队划分为多个,比如DBA团队、运维团队、后 端团队、 前端团队、 设计师团队等。 若我们继续按这种方式组织团队来实施微服务架构开 发,当有一个服务出现问题需要更改时,可能是一个非常简单的变动,比如对人物描述增 加一个字段,这需要从数据存储开始考虑一直到设计和前端, 虽然大家的修改都非常小, 但这会引起跨团队的时间耗费和预算审批。

        在实施微服务架构时,需要采用不同的团队分割方法。 由于每一个微服务都是针对特 定业务的宽栈或是全栈实现,既要负责数据的持久化存储, 又要负责用户的接口定义等各 种跨专业领域的职能。 因此,面对大型项目的时候,对于微服务团队的拆分更加建议按业 务线的方式进行拆分, 一方面可以有效减少服务内部修改所产生的内耗; 另一方面,团队 边界可以变得更为清晰。 

做 “产品” 的态度

       在实施微服务架构的团队中,每个小团队都应该以做产品的方式,对其产品的整个生 命周期负责。 而不是以项目的模式,以完成开发与交付并将成果交接给维护者为最终目标。

       开发团队通过了解服务在具体生产

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Cloud 开发的一些推荐规划 下一篇MyCat | 分库分表实践

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目