架构设计之「 微服务入门 」


戳蓝字“CSDN云计算”关注我们哦!640?wx_fmt=jpeg


作者 | 奎哥

来源 | 不止思考

微服务这几年不可谓不火,很多技术团队都开始在自己的项目上引入了微服务。一方面这些团队确实很好的推动了微服务的应用和发展,另一方面也可以看到一些盲目追技术热点的行为所带来的危害,比如很多中小团队对微服务的基础知识只是做了很浅显的了解就开始盲目的推动微服务的实施,最后导致了项目的失败。

微服务要想做好是一个非常复杂的架构,今天就先只聊一聊微服务的一些基础架构,算是入门篇。

一、什么是「 微服务 」?

「 微服务 」由 Martin Fowler 提出,它是指一种软件架构风格。一个大型的系统可以由多个微服务组成,每个微服务是被独立部署,独立完成自己的任务单元,微服务之间是通过API方式进行通信调用,是松耦合的。

这个模式听着是不是很熟悉的感觉?

因为在提出「 微服务 」概念之前,很多互联网公司的中大型项目早就是按照将业务拆分成独立单元的形式在部署和架构的,这与微服务的思路是一脉相通的,只不过实现方式没有现在这么规范与体系。

那「 微服务 」到底是怎么演变过来的呢?

在做一个新项目的时候,一开始项目大多数都很小,都是「 单体应用 」,这是很常见的做法。在项目规模小的时候,这种方式开发效率和运维效率都最高,符合互联网公司快速响应的要求。

但是随着业务量越来越大,项目也越来越复杂,开发团队人员也越来越多。这个时候还采用单体应用,问题就会很明显了。下面挑选两个最为常见的问题来举例:

  • 协同问题:多个人同时开发一份代码,在工作协同上就会经常遇到代码冲突问题。

  • 可用性问题:因为是单体应用,即使改个最小的功能,也需要整体发布,不仅直接影响了线上可用性,还可能会对正常功能带来风险。

为了解决这些问题,大家就开始考虑将「 单体应用 」进行拆分,进行服务化部署。然后又随着 Martin Fowler对「 微服务 」概念的提出,加上 DevOps 的流行,进一步促进了微服务的火热发展。

「 微服务 」的理念提倡每个服务都是单一职责,且每一个服务都能实现自治,因此可以带来一些明显好处:

  • 部署简单:每个微服务都可以独立去部署,方便快捷。

  • 逻辑清晰:将一个独立功能逻辑封装在单一微服务里面,实现整体项目的逻辑清晰。

  • 可扩展:因为可以随时增加和减少微服务,可以很方便的扩展功能。

  • 可靠性高:某一个功能的异常可以隔离在单一微服务里面,可以提高整体可靠性。

二、「 微服务 」的架构是什么样?

我们先来看一下「 微服务 」的架构图:

640?wx_fmt=png

(图片来源网络,粉丝太少就懒得画图了,大家发挥一下想象力将就的看看,哈哈)

看起来挺复杂对不对,事实上也确实很复杂。

所以微服务并不是适用于所有项目、所有团队的。在应用之前一定要搞清楚是否适合自己。

要保证这么一套微服务架构能成功运行起来,我们起码需要以下这些 微服务的基础组件

  • 服务注册

    部署了一个微服务节点,得让调用者知道啊,当微服务节点有增加或减少的时候,也得让调用者及时知晓啊。这些问题都是通过“服务注册”组件来实现的,服务提供者将自己的服务地址等信息登记到“服务注册”组件中,调用者需要的时候,每次都先去查询“服务注册”即可。免去人工维护微服务节点的信息同步问题。

  • 服务网关

    是指提供给外部系统调用的是统一网关。主要做安全和权限控制等。

  • 配置中心

    微服务的配置中心是用来统一管理所有微服务节点的配置信息的。因为同一个程序可能要适用于多个环境,所以在微服务实践中要尽量做到程序与配置分离,将配置进行集中管理。包括微服务节点信息、程序运行时配置、变量配置、数据源配置、日志配置、版本配置等。

  • 服务框架

    是指用来规范各个微服务节点之间通信标准的。服务间通信采用什么协议、数据是如何传输的、数据格式是什么样的。有了这个统一的“服务框架”就能保证各个微服务节点之间高效率的协同。

  • 服务监控

    微服务运行起来之后,为了能够监控节点的健康情况,保障节点的高可行,需要对各个服务节点进行收集数据指标、然后对数据进行实时处理和分析,形成监控报表和预警。

  • 服务追踪

    一旦使用了微服务架构,那么当有请求过来时,就会经过多个微服务节点的处理,形成了一个调用链。为了进行问题追踪和故障的定位,需要对请求的完整调用链进行记录。

    这里的服务追踪与上面的服务监控是不同维度的,一个是全局的,一个是微观的,发挥的作用也不一样。

  • 服务治理

    就是指需要通过准备一些策略和方案,来保障整个微服务架构在生产环境遇到极端情况下也能正常提供服务的措施。比如 熔断、限流、隔离等等。

当然,上述只是一个微服务架构最为核心的基础组件,一旦微服务体系过大,例如有几十上百个微服务节点,那么开发、维护、测试的成本就会非常大。因此一般还会引入 自动化部署 和 自动化测试 来提高协同效率。

三、「 微服务 」入门如何避免踩坑?

你以为微服务架构都是下面这样的吗?

640?wx_fmt=png

事实上,更能是下面这样的,哈哈。

640?wx_fmt=png

(图片来源网络)

大家都在宣扬「 微服务 」多么多么的好,例如:易扩展、松耦合、服务简单、独立开发、易维护、轻量级等等。虽然这些优势也是事实,但是「 微服务 」带来的问题也很多,尤其是对于刚入门的团队而言,应用微服务后,趟坑真的可以趟到你崩溃。下面就普及一些常见的问题来给大家打个预防针:

  • 不是所有项目都适用微服务

    有些项目规模还比较小,或者项目才刚立项启动,也只有三四个人负责开发维护,这时候是不建议一上来就搞微服务架构的。这种情况下搞微服务,不仅是“杀鸡用牛刀”,而且还无谓的增加了项目的复杂度,本身一个单体结构就可以搞定的事情,非得拆分N多节点,人员又不足以支撑这么多节点的开发维护,这完全是自找苦吃。反而是等项目成熟了、规模大了之后,再开始慢慢将原有结构拆为微服务才是正确的做法。

  • 不要拆分过多过细的服务

    即使项目经过评估后适合拆为微服务架构,但也不要过度拆解。有的团队喜欢将项目拆成很细很细的颗粒,最后把项目搞的特别复杂,整个团队都陷进去了。

    拆分服务的颗粒度应该根据业务发展和团队现状综合去考虑。这里可以参考一个很火的理论「 康威定律 」什么样的团队,就产生什么样的架构,微服务拆分的颗粒度是需要和团队结构相匹配的。当你着手拆微服务的时候,得先评估一下团队人员和素质,一般在开发期,2-3个人开发一个服务是合理的,在维护期,1个人维护2-3个服务也是合理的。

    如果拆分过细,开发人员跟不上,会严重降低大家的工作效率。并且过细的服务,会导致一个请求的调用链条很长,不仅会影响请求的响应时间,也会对线上问题排查带来增加难度。

  • 没有DevOps就不要急于微服务

    一个稳定的微服务架构,是需要 持续集成、自动化部署、自动化测试、健全的监控体系来保障的。如果团队还不具备DevOps,这些基础的建设都没有做好,一上来就搞微服务的话,就会导致实施过程中问题百出,微服务的优势不能发挥。

以上,就是对架构设计中「 微服务基础 」的一些思考。

640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 屡试不爽的互联网架构三大马车!

  • 抖音微博等短视频千万级高可用、高并发架构如何设计?

  • 20大5G关键技术

  • Fast.ai:从零开始学深度学习 | 资源帖

  • 10个简单小窍门带你提高Python数据分析速度(附代码)

  • 程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!

  • 暗网竟成比特币最大用户? 上半年5.15亿美元被用于非法活动


真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化

摘要: 阿里云数据管理DMS企业版,作为数据管理产品大家族里的新成员,于2017年11月开启公测,今年1月底正式发布商业化版本。 作为业界领先的面向企业的数据库DevOps解决方案,DMS企业版旨在帮助企业安全、高效的使用数据库…

flowable实战(五)flowable驳回/退回上一步/退回到

一、驳回/退回上一步/退回到(历史某一个节点) 我们经常需要工作流中退回上一步,或者退回历史某一个节点。但由于流程的场景是很复杂的,回退有以下一些场景:1.串行路线上的退回:流程中没有任何网关&#xff…

全链路压测一招搞定,阿里云性能测试铂金版发布

摘要: 阿里云性能测试(Performance Testing Service)是卓越的SaaS性能测试平台,具备强大的分布式压测能力,可模拟海量用户的真实业务场景,让所有性能问题无所遁形。近日,PTS宣布推出了基于阿里双…

老司机教你分析日志:分析用户的地理位置信息

摘要: 地理位置的需求 通常我们分析用户的需求,了解到用户当前位置在哪里非常重要,例如,可以根据用户的地理位置,针对性的推广本地广告。 通常,我们可以在客户端获取定位权限来获取GPS信息。但是如果用户关…

java中的switch的规则_细细讲述Java技术开发的那些不为人知的规则

本文介绍的Java规则的说明分为3个主要级别,中级是平时开发用的比较多的级别,在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。一、在finally方法里关掉input或者output资源方法体里面定义了input或者output流的…

华为,百度豪投,这类程序员要再次上榜了!

前不久百度AI开发者大会,李彦宏高调宣布百度AI技术;同时,AI测试权威软件AI Benchmark的测试数据显示,中国华为研发的7nm旗舰手机芯片麒麟810的AI分数,远远超过美国高通骁龙855了!早前华为就宣布&#xff1a…

flowable实战(六)flowable的意见表和附件表应用

一、act_hi_comment和act_hi_attachment两表表,前者意见表后者是附件表 意见表它里面有一个类型type字段,分别是comment代表意见(这个type可以自定义,例如自定义为:通过/退回/提前终止),缺省提供了comment&#xff0c…

Serverless在游戏、电商行业的一个运用场景示例

摘要: Serverless 是一种架构理念,具有自己的独特的优势和适用场景。本文以使用阿里云函数计算为例,构建一个简单具体的microservice为例,看看这种架构是如何达到快速开发和节约运维成本的。 点此查看原文:http://clic…

SDN精华问答 | SDN的核心技术是什么?

SDN火热了好一阵子,无论运营商、政府企业、投资机构,一段时间,不知道SDN、不能甩几个SDN相关的名词术语,似乎都落后于时代了。今天,就来看看关于SDN的精华问答吧。1Q:SDN的目的是什么? A&#x…

RocksDB 写入流程详解

摘要: 最初的写入流程,继承自 leveldb,多个 写线程组成一个 group, leader 负责 group 的 WAL 及 memtable 的提交,提交完后唤醒所有的 follwer,向上层返回。 支持 allow_concurrent_memtable_write 选项&a…

Greenplum roaring bitmap与业务场景 (类阿里云RDS PG varbitx, 应用于海量用户 实时画像和圈选、透视)

摘要: 标签 PostgreSQL , Greenplum , varbitx , roaring bitmap , pilosa , varbit , hll , 多阶段聚合 背景 roaring bitmap是一个压缩比很高同时性能不错的BIT库,被广泛使用(例如Greenplum, ES, InfluxDB. 点此查看原文 标签 PostgreSQL ,…

容器快速入门完全指南

戳蓝字“CSDN云计算”关注我们哦!作者 | JUSTIN来源 | RancherLabs介 绍容器,以及Docker和Kubernetes之类的容器技术已经日益成为许多开发人员工具包中常见的工具。容器化的核心目标是提供一种更好的方式,以可预测和便于管理的方式在不同的环…

Java错误提示框口怎么使用_如何在Swing中显示错误消息对话框?

以下示例展示了如何在基于swing的应用程序中显示错误消息警告。使用以下API -JOptionPane - 创建标准对话框。JOptionPane.showMessageDialog() - 显示消息警告。JOptionPane.ERROR_MESSAGE - 将警报消息标记为错误。示例package com.yiibai.swingdemo;import java.awt.BorderL…

PostgreSQL Oracle 兼容性之 - rownum

摘要: 标签 PostgreSQL , rownum , Oracle 兼容性 , row_number 窗口 , limit , PPAS , EDB 背景 Oracle ROWNUM是一个虚拟列,每输出一行递增1。 点此查看原文:https://yq.aliyun.com/articles/405183?spma2c4e.11153959.teamhomeleft.24.8W…

PostgreSQL 查询涉及分区表过多导致的性能问题 - 性能诊断与优化(大量BIND, spin lock, SLEEP进程)

摘要: 标签 PostgreSQL , 分区表 , bind , spin lock , 性能分析 , sleep 进程 , CPU空转 , cache 背景 实际上我写过很多文档,关于分区表的优化: 《PostgreSQL 商用版本EPAS(阿里云ppas) - 分区表性能优化 (堪比pg_pathman)》 《PostgreSQL …

flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析

场景模拟(请假流程): 员工申请请假 部门领导审批 人事审批 员工销假 本文用次例介绍在工作流中出现的几个对象及其之间的关系,以及在Activiti中各个对象是如何关联的。 在线演示实例:http://aws.kafeitu.me:8080/kft…

看懂云计算、虚拟化和容器,这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君来源 | 鲜枣课堂“云计算”这个词,相信大家都非常熟悉。作为信息科技发展的主流趋势,它频繁地出现在我们的眼前。伴随它一起出现的,还有这些概念名词——OpenStack、Hypervisor、KVM…

一张图读懂阿里巴巴一站式研发协同云——云效

摘要: 程序员、测试员、项目经理,你们有freestyle吗?阿里云云效,一站式企业协同研发云,“需求->开发->测试->发布->运维->运营”端到端的协同服务和研发工具支撑,助力企业快速创新迭代和研发…

flowable实战(十)flowable 启动流程到完成所有任务之间的数据库变化

来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图,很简单的流程,就是两个UserTask: 代码如下: DeploymentBuilder builderrepositoryService.createDeployment(); Deployment deploymentbui…

阿里敏捷教练如何优化优酷需求分析流程?

摘要: 如何帮助优酷迅速融合到阿里研发体系?如何优化优酷的需求分析流程?针对需求信息不明确,开发出来的功能不是产品想要的痛点如何解决? 点此查看原文:http://click.aliyun.com/m/41381/ 导读&#xff1a…