关于使用微服务架构的一些思考

一、什么是微服务

微服务就是一些协同工作的小而自治的服务。它有以下两个特性:

1.很小,专注于做好一件事

在单体应用时代,我们把所有的业务模块都写在一个系统内,随着新功能的增加,系统的代码库会越来越大,以至于想要知道该在什么地方做修改都很困难。虽然系统内划分了模块,但事实上这些模块的界限可能很难维护,相似的代码随处可见,使得修复bug或实现更加困难。

内聚性是指把因相同原因而变化的东西聚合到一起,把不同原因而变化的东西分离开来。微服务将这个理念应用在独立的服务上,根据业务的边界来确定服务的边界,这样就很容易确定某个功能应该放在哪个服务中。根据业务模块拆分之后就可以很好的避免由于系统代码库过大而衍生出来的相关问题。

关于服务拆分的粒度问题,需要考虑的因素:服务越小,微服务架构的优点和缺点也就越明显。服务越小,独立性带来的好处就越多,但是管理大量的服务也会越复杂。

2.自治性

微服务是一个独立的实体,可以独立的部署,服务之间通过网络调用进行通信。对于一个服务来说,我们需要考虑的是什么应该暴露,什么应该隐藏。如果暴露得过多,那么服务消费方会与该服务的内部实现产生耦合,从而降低服务的自治性。

二、微服务带来的好处

1.技术异构性

我们可以在不同的服务中选择合适该服务的技术实现。

2.弹性

在单体系统中,如果部署系统的服务器出了故障或者系统内某个模块的功能代码导致CPU/内存使用率过高,那么则会导致整个应用都不可用。而微服务则不会有这种问题,某个服务出现问题不会影响其他服务的正常运行。

3.扩展

单体系统只能作为一个整体进行扩展,即使系统中只有一小部分存在性能问题,也需要对整个服务进行扩展。如果使用微服务,那么我们只需要针对需要扩展的服务进行扩展,比如访问率高的服务我们可以部署多几个节点。

4.简化部署

单体系统中即使只修改了一行代码,也需要重新部署整个系统,影响范围大,出问题的可能性更高。微服务中只需要部署对应的服务,不会对其他服务产生影响。

5.与组织结构相匹配

各个服务由小团队开发维护,避免出现过大的代码库,从而获得理想的团队大小及生产力。

6.对可替代性的优化

在庞大的单体系统中,如果我们要修改/删除里面的某些代码带来问题的可能性更高,而微服务的代码量较小,在需要重写替换时风险更小。

三、微服务带来的挑战

1.微服务的部署与运维

如何能更高效的部署服务以及保证服务的高可用性。

2.分布式带来的复杂性

需要处理分布式事务或者与CAP相关的问题。

3.微服务的监控

包括服务可用性的监控、服务调用链路的监控。

以上内容根据《微服务设计》整理。

四、哪些情况下不适合使用微服务架构

结合本人的经历,总结了以下几种情况可能不适合采用微服务架构。

1.想快速上线产品

如果公司想短时间内快速上线一款产品来验证市场,那么此时采用微服务架构并不一定合适。因为微服务架构本身带来的复杂性,使得我们不仅要开发业务需求,还得解决微服务架构方方面面的技术问题,而其中的某些技术问题还是很难解决的,比如分布式事务等问题,这样一来必然会拉长项目周期,导致产品无法按时交付市场。而如果此时采用单体架构去开发,只需要专注业务需求即可,待到产品取得成功并逐步发展时,再转型至微服务架构也不迟。

2.团队微服务技术基础较薄弱

如果技术团队成员没有良好的微服务理论或者实践基础,对开发人员而言:那有可能造成的一个问题是,在他们编写代码时,还是按照单体应用的思想去编写代码,比如在跨服务跨库调用的场景,完全不会考虑到分布式事务的问题,容易造成业务服务数据的不一致,从而引发故障。对于运维人员而言:如果不具备自动化部署能力,那么要部署N多个服务,这将是一件痛苦的事。所以在采用微服务架构之前,请确保团队成员已经具备微服务架构的理论或实践基础。

3.系统规模较小

如果系统规模较小,业务模块可能不超过5个,同样不适合采用微服务架构。因为对于微服务架构来说,复杂性是一个重要的考虑因素,可能要解决微服务架构带来的复杂性会比开发系统需求更难,这样未免显得有些得不偿失。

4.只是想体验微服务

现在微服务的热度很高,有的技术团队可能想体验一把,于是就准备在项目中引入微服务。但是在这之前要先想清楚是否能hold住,否则只会在采坑的路上越走越远,其实对于公司来说是不关心具体的技术实现的,公司领导只关心业务需求能否实现。对我们开发而言,也应当以实现业务为主要目标。

总的来说,由于微服务架构带来的开发与运维的复杂性,如果存在上述的一些问题,建议不采用微服务架构。

五、微服务的实践

微服务架构技术选型包括Spring Cloud和Dubbo,两者之间的区别对比在网上有相关资料,这里不再赘述。总的来说Spring Cloud是微服务架构的一套完整的解决方案。

Spring Cloud提供了一系列的组件来支撑微服务,一些推荐使用的基础组件包括:

  • 服务注册发现:Eureka
  • 服务网关:Zuul
  • 服务调用:Feign
  • 软负载均衡:Ribbon
  • 限流熔断:Hystrix
  • 配置中心:Apollo(备:携程开源,推荐使用)
  • 日志监控:ELK
  • 服务调用链路监控:可选的有CAT、Zipkin、SkyWalking

虽然Spring Cloud提供了完善的组件,但是在具体的实践过程中还是会有一些坑要踩。

六、总结

在我们享受微服务带来好处的同时,也得接受它带来的挑战,能否实施微服务也要结合实际情况,从实际出发。

另外一个很重要的点是,制定开发规范,提高代码的质量,别留下太多的技术债务,做到这些虽然不容易但是很重要。


如果文章对你有帮助的话,给文章点个赞吧。

如果有写得不正确的地方,欢迎指出。

文章首发公众号:会跳舞的机器人,欢迎扫码关注。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266