微服务笔记(一):介绍

微服务已经火了有一段时间了,Martin Fowler 在2014年3月也开始发文对微服务进行说明和分析,近两年各种技术社区内对微服务的分享和讨论也比比皆是。和其他技术话题一样,争议总是不少的,有争议说明大家都在思考,所以我也参与到大部队中来,一边学习一边谈谈我的理解。

什么是微服务

我理解微服务实际上是SOA的一种实现方式,它并不是什么新东西,也不是什么发明创造,只是在近几年随着虚拟化技术、基础设施自动化、分布式系统、持续集成、领域驱动设计等的大量实践应运而生的一种模式,只因这些技术实践相结合让人们重新思考在软件产品交付过程中如何做到更快、更灵活,并拥抱变化,从而总结出了微服务的架构风格。

微服务特点

既然有个“微”字,那么很多人就会觉得代码少就是微服务,但实际上“微”和代码量并没有直接关系。这里的“微”更应该理解为专注,或者说高内聚,一个微服务只专注于一种业务,遵循单一职责原则,不要为了小而小,要根据实际业务来找出服务边界。

除了“专注”,微服务另一个主要特点就是高度自治,首先服务架构要和团队结构相匹配,此外服务间是低耦合的,服务间通过网络进行API调用,服务隐藏内部实现,修改一个服务不会对其他服务带来影响,在这些前提下,团队可以灵活构建服务,并更快响应不断变化的需求。

微服务与单块应用架构比较

先说说开发方面。单块应用意味着采用单一的技术栈,很难对新技术进行尝试,且随着时间的推进,单块应用会变得十分臃肿和复杂,很难保证一个人修改的代码不影响到其他人的代码,且开发者会对修改一些早期的代码望而却步,生怕自己的修改对整个系统造成影响。但是单块应用也正因为采用单一技术栈,使得团队在具体技术层面容易有基本一致的认识,且因为对这一技术栈的了解和深入,开发者就能够更自信的做出稳定的程序。微服务由于服务间的高内聚低耦合及其自治性,每个服务是可以独立演进的,所以团队更容易尝试各种新技术,也更容易对服务进行修改或重构,甚至可以对历史遗留的代码或服务直接进行替换,因为代价很小,且对整个系统带来影响是可控的,因此就使得团队的创新和成长能力更加突出。

测试、部署和监控。单块应用所有代码都是放在一起的,工程中可能有分模块也可能没有,当开发者提交代码后,CD 系统跑完所有测试,再对整个工程进行构建和部署,整个流程的配置相对比较简单,监控需要的一些指标通常运行环境的各种中间件也已经提供了相应的接口,应用中需要做的事情并不多。但是在大型的单块应用中,即使只修改了一行代码,也需要跑完上述整个流程才能发布此次变更,由于重新发布整个应用带来的影响较大,考虑到风险,应用的发布频率会很低,于是在两次发布之间可能会积累了较多的修改和新特性的增加,使得下一次发布和之前的版本差异很大,出问题的概率也就大大增加。微服务中的服务都是独立的,所以一个服务的发布不会影响其他服务,在发布出现问题的情况下也可以快速回滚,因此Bug修复和新特性增加都可以快速上线。但是由于服务之间存在着依赖关系,要对服务进行测试就需要同时启动其依赖的服务,或者采用一些特殊方式来确保测试能够走通,在部署服务过程中如果出现问题,还需要有服务降级手段来保障系统可用性,在监控方面也要结合服务的运行环境做较多工作,且由于一项业务数据可能流经多个服务,为了达到较好的监控效果还要对调用链进行维护。

然后是伸缩性。单块应用运行起来所有功能都是一个整体,一旦其中一个功能挂掉,可能整个应用就挂掉了,要提高应用可用性,就需要对整个应用进行水平伸缩扩展,例如在其他机器上再运行若干个应用实例,并结合负载均衡等手段。另外就是当应用性能不足也需要做水平伸缩扩展时,也要对整个应用进行扩展,即便性能不足的只是其中某一个功能。虽然单块应用的扩展看起来不那么合理,有点浪费系统资源,但是操作简单,维护成本不高。微服务在伸缩性上能够更灵活的进行扩展,符合去中心化的思想,结合现如今流行的公有云服务,可以随时对需要提高可用性和性能的服务进行扩展,但是由于服务实例的增加,随之带来的是服务管理的复杂度上升。

再说说性能。单块应用大都是进程内调用,性能的消耗一方面是系统外的网络、IO等开销,一方面是高并发的处理,这些可以通过一些主流的技术手段来改进,但是由于单块应用内部的高耦合和复杂性,往往对一处进行优化的同时可能又带来其他处的问题,因此很多大型单块应用的优化重构经常只是不停地有人在说,实际操作起来却举步维艰。微服务由于服务间都是网络调用,很多人会觉得增加了太多网络开销,性能堪忧,确实网络调用不会比进程内调用快,但是由于微服务易于重构和创新,因此自身的整体性能也易于得到提高,且提高的性能一般远超出网络的性能开销。

除了以上几点之外,微服务还需要处理分布式系统带来的各种复杂问题,甚至要面对分布式事务或CAP相关问题等等,微服务相比单块应用确实解决了很多问题,也带来了一些新的问题,如何平衡和取舍,这就是架构要考虑的问题,我的想法是取长补短,结合自己团队目前的情况,设计符合自己的架构,要知道没有一种放之四海而皆准的架构方案,所以不要觉得别人用着好的模式你就可以直接拿来用,找到适合自己的方法才是架构之道。

本文只是先挖个坑,没什么内容,以后会展开对微服务的思考,欢迎高人或对微服务有兴趣的朋友和我交流。


本文同时发布于我的微信订阅号


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

推荐阅读更多精彩内容