微服务介绍

背景

微服务是什么?杜克大学教授DanAriely说过一段非常出名的话,用来表述Big Data的发展现状。我觉得把这句话放到微服务身上也极其贴切。

Micro-services is like teenage sex:
Everyone talks about it, nobody really knows how to do it, everyo ne thinks everyone else is doing it, so everyone claims they are do ing it

微服务就像青春期性行为的话题,所有(小屁孩)都在讨论它,但没人知道怎么做,所有人都以为其他的人都在做,因此所有人都宣称他们自己也在这么做。

大到BAT级的应用,小到两三人的软件作坊,开发团队都会说自己的系统是使用“微服务架构”,这就像几年前大数据被吹到天上的时候,只要有一个数据库就可以说自己的系统是“基于大数据技术”。那这些所谓的微服务架构,到底是真微服务还是伪微服务?又或者是为了微服务而微服务呢? God knows

一字箴言——微

要说微服务,那么就绕不开这个微小的微字。亚马逊的掌门人JeffBezos提出过一个很有意思的观点: The two pizza principle,双披萨原则。

Teams shouldn’t be larger than what two pizzas can feed

言下之意就是,如果两个Pizza还不能让你的团队吃饱,那么你的团队可能太大了。很可惜,它并没有说Pizza的大小,而且他的团队也没有老师这号凭-己之力就可以干掉2个Pizza的人。但是Jeff提出了一个蛮有建设性的意见,就是保持小规模的团队。
在这里插入图片描述
如果我们保持规模较小的特战队模式,那么这个团队的项目/模块规模必然也要控制在-定范围以内,他们所负责的项目也应当是-组相对较小,并且独立的功能单元。通常情况下并不是先有团队再有业务架构,实际上我们的团队应该是围绕“业务功能来组织的。

对于微服务的划分,什么粒度的微服务才是合适的?这个没有标准的答案,假如你的用户只有100个,那么还需要做服务划分吗?我想并不需要,因为对这种规模的项目来说,单体应用是更好的选择微服务反而会增加运维和研发成本。那么当你的应用要承接几十万用户的时候,无论是从交付迭代的效率来说,还是从高可用的角度来说,微服务架构会是更好的选择。

微服务的印象标签

微服务领域有众多开源项目,比如后面我们要深入学习的Spring Cloud就是目前这个领域的头牌。但是要提醒大家的是,并不是说你在项目中应用了微服务的开源技术,那么这个项目就摇身一变成了微服务架构,土鸡穿了马甲还是土鸡,可变不成凤凰。这些开源技术就像一个人的外功招式, 武术架子使的再漂亮,没有内功加持还是花架子。

那么微服务领域都有哪些所谓内功?其实这些都是软件设计中很常见的准则,并不是什么高深的功夫,但是这些准则可以很好的应用到微服务规划,或者用来识别业务主链路。我们来回顾一下这些耳熟能详的软件设计方法论。

拆迁办事处

对我们来说最直观的感受就是一个字“拆”,应用微服务化的第-步就是理清楚两个问题,拆什么和怎么拆。字面意思上很好理解,就是将一大坨纠缠在- -起的服务拆分成单个服务,剥离出去独立提供服务。在稍后的小节里我们将一起来探讨拆迁办的办事 儿准则。

单一职责

软件工程的新理念层出不穷,但“单一职责”这句口号喊了几十年仍然是一条Golden Rule。如果说设计模式是“微观”领域的单一职责,那么微服务架构就是在“宏观”层面上做到单一职责。这也是整个微服务话题最容易引战的部分,因为它涉及到微服务的拆分,至于怎么个拆法,那就公说公有理婆说婆有理了。

比如对大型互联网公司来说,“大中台”就是一套构建在集团层次上的服务治理理念。拿阿里来举例,集团各个事业部的业务模型最终都对接到所谓的“大中台”,从前端的商品服务、营销优惠服务、订单和用户服务,再到底端链路的支付结算和汇金平台等等,都有对应的中台业务方做支撑,在整个集团层面已经把中台业务做了细致拆分和领域划分,大大节省了新业务的接入成本。对中小型业务来说,拆分粒度不需要过细,识别出核心主链路,围绕主链路做拆分即可。

单一职责不仅涉及到服务拆分,在微服务领域,这种职责划分要求将数据库、开发、测试、发布和运维都划归到一个领域模型里,由一个团队完全掌控应用的整个生命周期管理。就拿电商业务中的商品模块来举例,商品的数据完全存放在商品微服务中,任何上下游系统都要通过商品服务提供的接口获取数据,而不是像单体应用那样直接访问数据库。尽管这种方式增加了系统复杂度,但是对于庞大的应用系统来说,各个微服务模块可以用一种“小步快跑”的模式做迭代发布,提高了产品迭代速度。

研发团队赋能

很多公司都存在这么一个问题,研发团队处于食物链的最底层。发布要经过QE团队的同意,然后再寻求运维团队的帮助来部署项目 。生产环境的任何权限看不到也摸不着,每次都要辗转找到线上OPS团队来排查问题,一个小小的datafix也要经过层层审批。你要说这类公司能做好微服务,不管你信不信,反正我是不信。

如果你的开发团队没有被充分赋能,自己的微服务都不能说了算,那一定不能好好施展拳脚。开发团队作为最了解应用系统的一方,却需要找那些对系统一知半解甚至一无所知的人来审批哪怕一个微小的线上操作,这显然不太合理。要做好微服务,就需要充分赋能你的研发团队,让他们掌握更多的话语权。

在这个问题上阿里是这样做的,研发人员除了不能让生产服务器原地爆炸,其他事情几乎都能做。即便是线上数据订正,除非涉及到的记录数量非常庞大,那需要找分派给部门的DBA审批一下,绝大部分数据订正只要自个儿团队里审核一下就好。大部分生产环境的权限也只要找直属主管审批就好了,就连集群扩容缩容都可以在团队内部解决。微服务团队就成了封疆大吏一般的存在,在自己的地盘就是自己说了算。

所以呢,充分赋能开发团队,这是现在互联网公司主流的价值观。

可独立部署

每一个微服务模块都应当是一个独立打包,独立部署的应用,在发布流程上与上下游应用没有直接的依赖,由开发团队直接负责线上发布操作。这种方式特别适合应用于微服务模块,保证快速迭代。在这种模式下对接口升级有特殊要求,如果你对接口进行了重大功能改造,同时又不能100%保证向前兼容的情况下,那么就需要提供一个新的接口,而不是在老接口上大动手脚,因为你无法保证上游应用可以兼容这些改动。当所有上游应用都切换到新接口后,老的接口没有流量了,这时候才可以将老接口下线。所以我们在很多互联网公司的项目里会看到一个业务功能对应好几个同名接口,但各个接口之间版本号不同(比如placeOrderV1,placeOrderV2)

阿里在项目发布部署方面的做法是这样的,将运维的工作全数交给开发团队自己负责,每个团队自己(或者事业部)来拟订发布时间窗口和发布策略(比如采用蓝绿发布或者金丝雀发布),OPS团队大部分转型去做运维工具的开发,纯OPS的团队人数极少。这在一定程度上也是充分附能研发团队的一种方式。

当然了,独立部署的方式也有一个弊端,你的改动也许不经意间导致了下游团队的bug。因为独立部署的模块做全链路end-to-end测试非常困难而且耗时间,所以很多小改动可能并没有做全套回归测试,也没有知会下游应用。在16年我经历过一个线上故障,所有上架商品的优惠计算全部失效,后来排查发现,淘系营销优惠服务调用了一个比较“冷门”的接口来读取用户信息,而上游团队以为这个接口没人在用,于是在某次发布中把接口直接下线了。

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文笔记合集】卷积神经网络之深度可分离卷积(Depthwise Separable Convolution)

本文作者: slience_me 我看的论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 内容 1. 标准卷积 假设输入为DFDFM,输出为输入为DFDFN,卷积核为DKDKM,共有N个卷积核进…

eclipse ADT安装及abap cds模版创建

文章目录 1.前提2.安装3.创建cds模版 abap cds 常用语法 https://blog.csdn.net/weixin_49198221/article/details/135531478?spm1001.2014.3001.5501 1.前提 需要了解版本关系: **1.eclipse:**2023-06 (4.28), 2023-09 (4.29), 2023-12 (4.30) 2.Windows: ​ 1.Windows …

重启阿里云ESC服务器后,数据库与jar包外面无法访问bug

bug 重启了服务器,发现从外面无法连接数据库 原因 使用firewall-cmd --list-all命令查看服务器防火墙的配置,发现没有开启3306端口的开放,虽然我们在安全组设置3306端口但是防火墙没有开启,外面是依然无法访问的。 firewall-cm…

大型食品企业-白象集团选择泛微搭建集团一体化的数字化办公平台

白象食品股份有限公司(以下简称“白象食品”)正式创建于1997年,是一家以生产销售优质面制品为主、以提升人民美好生活为宗旨的综合性食品企业。 (图片素材来自白象官网) 目前,白象食品已在河南、河北、山东…

java.lang.UnsupportedOperationException: null 其一解决办法

文章目录 前言一、错误回顾1.详细信息2.代码详情 二、解决方案1.错误原因2.解决方案1.使用 new ObjectMapper() new TypeReference<List>(){}2.使用 SerializerFeature.WriteMapNullValue.getMask() 总结 前言 当我们远程调用传递泛型集合&#xff0c;如 List<?>…

Transformer 位置编码

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

中仕公考:2024年度国考笔试分数公布,进面名单已出

2024年度考试录用公务员笔试成绩和合格分数线已经公布&#xff0c;考生们可以自行登录公务员专题网站查询成绩。 进面人员名单根据规定的面试比例&#xff0c;按照笔试成绩从高至低的顺序&#xff0c;1月14日已经公布进面名单。 没有进入面试人员名单的考生可以关注调剂&…

面试Java岗老喜欢盯着JVM问,有那么多项目要调优吗?

面试Java岗老喜欢盯着JVM问&#xff0c;有那么多项目要调优吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给…

Qt 快捷键设置

以 “在编辑时自动补齐”快捷键 为例&#xff1a; 位置&#xff1a;红色 搜索快捷键&#xff1a;蓝色 修改方式&#xff1a;绿色 快捷键&#xff1a;黄色

C++ 类的静态成员

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时&#xff0c;这意味着无论创建多少个类的对象&#xff0c;静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句&#xff0c;在创建第一个对象时&#xff0…

内存泄漏检测方式

一 、 日志记录 通过宏定义重载了 malloc 和 free 函数&#xff0c;以在分配和释放内存的时候记录一些信息&#xff0c;包括文件名和行号&#xff0c;并将这些信息写入到相应的文件中。然后在 main 函数中演示了使用这些宏进行内存分配和释放。 _malloc 函数&#xff1a; 在分配…

【Frontiers】“神仙期刊”,JCR1区,发文量3000+,录用率75%,1-2个月录用!

发表说 截图来源&#xff1a;LetPub 01 期刊概况 Frontiers in Endocrinology 【出版社】Frontiers Media S.A. 【ISSN】1664-2392 【检索情况】SCI&Scopus双检 【WOS收录年份】2012年 【期刊官网】 https://www.frontiersin.org/journals/endocrinology 【投稿系统…

【电商API】DIY网络爬虫收集电商数据

DIY网络爬虫收集电商数据 网络爬虫是最常见和使用最广泛的数据收集方法。DIY网络爬虫确实需要一些编程知识&#xff0c;但整个过程比一开始看起来要简单得多。 当然&#xff0c;爬虫的有效性取决于许多因素&#xff0c;例如目标的难度、网站方的反爬虫措施等。如果将网络抓取用…

为啥4位单片机那么LOW,还没被淘汰?

我以为8位的51单片机已经够低端了&#xff0c;没想到竟然还有4位单片机&#xff01;它到底有什么优势&#xff1f;用在什么领域&#xff1f; 在刚开始学习单片机的时候&#xff0c;我一直以为用越高端的芯片就越牛逼。 而现实&#xff0c;公司做产品和我们单片机学习者&#xf…

人工智能专业必须需要考哪些证书呢?

我们来看看2024年人工智能专业的企业和个人都在紧张报考的两项AI认证证书报考&#xff1a; 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求&#xff0c;深入实施人才强国战略和创新驱…

两整数之和

题目链接 两整数之和 题目描述 注意点 不使用 运算符 和 - ​​​​​​​&#xff0c;计算并返回两整数之和-1000 < a, b < 1000 解答思路 需要用位运算来模拟加法&#xff0c;关键是要找到相加的和以及进位1的部分。如果不考虑进位的话&#xff0c;相加可以运用异…

30天精通Nodejs--第十七天:express-路由配置

目录 引言基础路由配置路由参数与查询参数路由前缀与子路由路由重定向结语 引言 上篇文章我们简单介绍了express的基础用法&#xff0c;包括express的安装、创建路由及项目启动&#xff0c;对express有了一个基础的了解&#xff0c;这篇开始我们将详细介绍express的一些高级用…

PlatformIO中ESP8266使用GxEPD库和U8G2库驱动 2.9寸黑白墨水屏显示中文

Content 0. 前言1. 安装platformIO环境2. 新建工程3. 添加外部库4. 修改U8g2_for_Adafruit_GFX库5. 代码和烧录 0. 前言 墨水屏是黄鱼淘的&#xff0c;效果还不错。 U8G2库一直编译不进去&#xff0c;显示汉字始终不太美观&#xff0c;个人一直不太喜欢汉字取模的方法&#x…

字节、字符与字符编码的区别与联系

字节、字符与字符编码的区别与联系 字节 位(bit)是计算机中信息的最小单元。位是由电路实现的&#xff0c;硬件底层使用数字电路&#xff0c;以电压的高低作为记录信息的方式&#xff1a;较高的电压表示数值“1”&#xff0c;较低的电压表示数字“0”。因此&#xff0c;一个位…

微信预约挂号系统源码,公众服务号(小程序)预约挂号,适用于各级公立和民营医院,用来搭建互联网医院平台,可对接院内his、lis、pacs系统

掌上智慧医院、公众服务号&#xff08;小程序&#xff09;预约挂号、互联网平台源码 系统介绍 “移动智慧医院”平台既可以让患者足不出户就可以利用微信进行在线挂号&#xff0c;实现分时段就诊&#xff0c;就诊后也可以直接使用手机微信缴费&#xff0c;还可以通过微信实现查…