学习微服务之前必须要了解的基础知识
最近某某项目上要求使用微服务架构,技术文档高深莫测,不明觉厉。公司对应推出了支持微服务框架的全新版本,号称全面拥抱SpringCloud,一切都彰显着这个新名词的来势汹汹。那这么牛逼的玩意儿到底是个啥,是干啥用的,为啥要用它?不要慌,学习它之前必须要先了解一些基础知识。
像我这种技术小白,看到这些词(集群/分布式/微服务/SOA
)的时候,感觉就是遥不可及的(高大尚的技术!!)。就好像刚学Java面向对象的时候,在论坛上翻阅资料的时候,无意看到"面向切面编程",也认为这是遥不可及的(高大尚的技术!!)。
但真正接触到"面向切面编程"的时候,发现原来就是如此啊,也没什么大不了的。只不过当时被它的名字给唬住了...
不知道各位在刚接触这些名字集群/分布式/微服务/SOA
的时候,有没有被唬住了呢??
以下内容来源维基百科:
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多
集群技术特点:
在维基百科上说得也挺明白的了,我来举个例子吧。
某项目业务系统访问量大,单纯在A机器上部署的一套系统已经不能满足要求,访问时延很高。于时在B机器上部署另一套业务系统,通过负载设备将请求分担。对应的集群有如下特点:
我现在的博客发布到服务器去了,未来越来越多的人访问了,访问有点慢,怎么办???很简单,(只有充钱才能变强),加配置吧(加cpu,加内存)。升级完配置之后,访问人数越来越多,于是发现又不禁用啦,在这台机器上加配置已经解决不了了,怎么办???很简单,(只有充钱才能变强),我再租一台服务器,将博客也发布到新租的这台服务器上去。
特点:
好处:
集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)
以下内容来源维基百科:
分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标。
我也来举个例子来说明一下吧:
GUXING是一个业务开发,但是公司里人太少。GUXING只能又做业务开发、又做工具开发、又做UI设计。虽然也能行,但术业有专攻,GUXING离全栈工程师还很远。这时候公司招人了,小张做工具小赵做前端。GUXING立马压力顿减,干活儿也比原先有劲了。可以看出
我的博客已经部署到两台服务器去了,但是越来越多的人去访问。现在也逐渐承受不住啦。那现在怎么办啊??那继续充钱变强??作为一个理智的我,肯定得想想是哪里有问题。现在博客的模块有好几个,全都丢在同一个Tomcat里边。
其实有些模块的访问是很低的(比如后台管理),那我可不可以这样做:将每个模块抽取独立出来,访问量大的模块用好的服务器装着,没啥人访问的模块用差的服务器装着。这样的好处是:一、资源合理利用了(没人访问的模块用性能差的服务器,访问量大的模块单独提升性能就好了)。二、耦合度降低了:每个模块独立出来,各干各的事(专业的人做专业的事),便于扩展
特点:
好处:
分布式:一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)
集群和分布式并不冲突,可以有分布式集群
现在GUXING的公司规模变大了,有100个小伙子写业务,50个小姐姐做前端,30个小伙子做工具,20个小伙子做测试。
其实我认为分布式/微服务/SOA这三个概念是差不多的,了解了其中的一个,然后将自己的理解往上面套就好了。没必要细分每个的具体概念~~
在我的理解,举个例子