纸上谈兵-微服务

听着陈奕迅的《K歌之王》,开始了这篇博文的书写。首先为什么是纸上谈兵呢,因为我并没有在实战场景下自己搭建过整套微服务,不过在美团内部确实是一直在用微服务,所以这篇博文更多是我看书和在美团看到的东西后的一些思考,当然这些思考是来自于一个专门做java后端刚满一年的人。

背景

在准备专门做Java后端前,想着可以真正深入学习或者做一些东西,例如一些中间件。开始做之后才发现,似乎只需要安安心心的做业务就行了,其他的该有的都有了。美团的中间件非常完善,只要我想到的,基本上都有,慢慢的也就习惯用这些中间件进行开发了。但是当我要离开美团的时候,就很纠结了,离开了这些中间件,我还怎么开发?虽然我一直在用微服务,但是我从3个月前,才真正的开始了解它。因为才做后端一年,找工作确实有点难,所以后面就要把时间放在其他的东西上的,所以只能先把这些东西写下来,也证明这几月没白折腾。

后端的变化

后端的变化

通过这张图,可以看出后端在这十几年的变化,从单体应用到分布式再到微服务,后端服务架构的变化并不是某个大牛说应该这样就变成这样的。而是因为随着业务的发展,对于后端的要求也在进行变化。在网站创建初期,用户量并不多,所以一个单体应用配合一台比较好的机器就可以支撑业务;后面用户量和访问量的增加,这时候单台机器已经搞不定了,所以有了负载均衡,有了分布式;随着移动互联网的发展,访问量急剧增加,用户对于服务的稳定性也越来越高,这时候就演变成了微服务的架构。为什么微服务的稳定性会更高,因为通过将原来的单个应用根据功能分成各个服务后,就可以很容易实现降级、独立部署等功能。特别是降级,我还记得很清楚的一次是春晚支付宝刷红包,差点把支付宝搞崩了,后来听说他们已经准备的机器数比双11的几倍,但是还是撑不住,只能通过降级先顶住。

该不该用微服务的架构

微服务能增加业务的可用性,为啥还问该不该?首先我要先说下美团的情况,在美团内部,有专门的一个团队在维护公司的的微服务系统,每一个中间件也有专门的团队在进行维护,而这个维护成本对于小公司能不能承担?能不能招到能维护的人?当然有些人说开源框架那么多,拿过来自己部署一套不就好了,这个当然没有那么简单,我开始了解微服务的时候,是通过spring-cloud入手的,当然现在也仅限于它,当我第一次听到的时候,我也以为只是一个开源库,拿过来就可以用了,真正了解后,才发现这是套框架,里面包含了太多的各种组件,所以spring-cloud也是通过名字来作为版本号,因为不同的版本号里面对应的各种组件也有自己的版本号。部署完后还不一定能直接用,还需要定制一些东西,规定一些开发规范和流程。

公司的业务需不需要它,搭建一套微服务是需要成本的,所以取决于性价比。在我看来,如果业务相对简单独立,就没必要了,因为也分不出什么服务出来,反而可能会影响业务的稳定性。如果业务正在快速增加中,就可以开始考虑部署,但是我还是建议步子不要跨太大,容易扯到蛋,应该从边缘业务开始尝试接入,然后慢慢进行转移,还需要进行各种压力测试,需要先保证中间件服务的稳定性,才能保证业务服务的稳定性。

在我来看,如果一次版本迭代的周期因为开发功能太多,模块太多导致时间过长,就可以开始考虑,或者十几个人开发在同一个应用里进行开发,并且开发不同的功能,也可以开始考虑。

微服务有哪些东西

正常这个部分应该开始介绍什么是微服务的,给个定义原则啥的。不过我看过的书也很少能给准确的定义,所以我只就写写我不够准确的理解。一款产品都有各种各样的模块,例如一款电商产品,有商品模块,订单模块,用户模块,支付模块。而在微服务里,这些模块在后端都是单独作为一个应用存在的,而这些应用都提供某种服务,所以整套架构就成为微服务。说白了,就是代码解耦,面向接口编程。


后端架构图

上图是我认为微服务应该最基本拥有的,当然还有很多东西没有包含在里面,后面我会单独介绍一些模块,然后尽量解释清楚,然后把一些没有标识出来的东西也尽量写出来。

服务名

微服务架构的服务数量几十个算少的,几百个算正常。为了便于管理,我们需要有服务名的命名规范,来保证服务名不重复,也便于通过服务名知道,这是哪个产品的哪个服务,例如用类似maven的groupId+artifactId做为服务名

Nginx和网关

对Nginx和网关有了解的人,可能会认为他们的功能是重复的。首先在我整个架构中,Nginx是管理对外服务的,而网关服务是管理内部的。也就是所有外部来的请求都会先经过Nginx,到达网关后,网关根据配置信息转发到具体的服务中。因为所有的流量都会经过网关,所有网关一般会有多台机器,然后通过nginx进行负载均衡,分发到各个机器上。如下图:


外网流量转发

服务管理中心

服务管理中心,一般也成为服务治理中心。当我们将各个应用拆分成各个服务后,就会导致服务量的数量很大,所以我们需要一个服务治理中心将这些服务管理起来。当我们新增一个服务的时候,都会给他分配一个服务名,然后在服务代码中配置该服务名,当服务启动的时候,需要先通过这个服务名来服务治理中心进行注册。当我们把服务治理中心和网关配合起来的时候,就可以实现机器的上线和下线功能,网关从服务管理中拉取服务的可用实例列表,然后将请求发送给他们,当在服务治理中心,将某台机器配置为下线,那么网关就不会把请求发送给他了。


服务的管理

服务间通信

在微服务架构中,有很多服务,服务和服务之间需要进行通信,在我看过的微服务的书中都是通过http进行通信的,这样的做法有一个好处就是服务之间耦合性会没有那么强,而且通过接口文档,也可以让一个新服务很快进行接入,当然也可以将这些接口封装为一个sdk,提供出去。不过我也见过很多使用tcp作为通信方式,这样会比http的性能会好很多。

日志中心

日志中心通过名字就能明白他是用来管理日志的,在日常开发和维护中,查看日志都是很重要的手段,而现在一个服务基本都是有几台机器,当出现问题了,如果不知道是哪台机器,可能就只能一台一台的找过去了,所以这时候日志中心就很重要了,将所有机器的日志都上报到这里,我们可以通过日志中心直接查看所有机器的日志,也便于调查问题了和统计数据。而当日志中心和服务管理中心配合起来,日志中心就成为所有的服务的中心,可以直接通过服务名进行管理。

配置中心

随着服务越来越多,我们需要可能对同一个服务的多台机器进行统一配置,也需要将一些通用配置对多个服务进行统一配置,所以配置中心是必不可少的。

数据库管理服务

在微服务结构中,一般都是单服务单库,也就是一个服务对应一个库。这样能降低随着业务增长对于数据库的压力,当然这样也增加了对于数据库管理的压力,几百个服务,可能会有几百个库,所以在我看来需要一套比较完善的数据库管理服务,不过这个点在我看过的书中很少提到。书中提到一般都是如何实现主从分离、分库分表等功能,这些当然很重要,但是不应该让服务方实现这样的功能,而是应该配合管理服务提供相应的接入中间件,在中间件中实现这些功能,然后让服务方进行接入就行了,然后在管理服务中进行配置。

缓存管理服务

几百个服务中有些需要缓存有些不需要缓存,怎么让他们方便的接入是个问题?几百个服务共用一个缓存服务,命名上的冲突需要解决?所以缓存管理服务就是专门用来管理各个服务的缓存使用,定义命名规范,也可以做相应的中间件,实现一些动能。

跟踪监控服务

在微服务架构中,用户的一次调用,可能涉及到很多个服务,如果有某一个服务除了问题,怎么调查?怎么确定是哪个服务,哪台机器?所以跟踪监控服务就很重要,他需要可以实时跟进当前所有的服务的运行情况,调用链情况,当出现问题后可以实时发现,并发送报警通知。

其他中间件服务

在微服务架构中,服务一般是分为两种,一种是业务服务,一种是中间件服务。中间件服务是为业务服务保驾护航的,所以一般当有一些新的技术需求,一般都是新建一个服务专门做这个。例如某个业务需要接入hbase,但是公司内部还没有该服务,但是评估发现确实是需要这样的服务,就可以新建一个服务,专门提供hbase的各项功能,然后让业务服务进行接入,当有其他业务方也要接入时就很方便了。

结尾

我在了解微服务的时候,脑子里有无数个想法。但当我开始写这篇博文的时候,有些想法却很难表达出来,这可能就是词不达意吧。这可能跟我的写作能力相关,而且因为分两天写完,第二天写的时候思路全断了,一些细节就也没有继续解释清楚,挺遗憾,希望后面还有机会可以来完善这篇博文。

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

推荐阅读更多精彩内容