这一年多来云计算、微服务、虚拟化、容器等技术真是火遍开发社区,现在新做一个项目,如果不提微服务,不提容器,感觉这个项目太低端了,完全不体现架构师的水平。
云计算
云计算是个很古老的话题,我记得我大学期间老师就讲这个话题了,当时是叫网格计算,电子商务课上讲的,原理就是把大家的PC机都组成几个集群,利用空余时间、空余的计算能力来进行大规模计算。想的很好,不过因为网络原因、个人隐私原因等等,这最后都是空想,因为谁也不想把自己的电脑贡献出来,让别人去用。而且当时这就是一种设想,具体的技术实现都没有成行,也就慢慢淡化了。这两年再提云计算,当然都很务实了,有比较清晰的盈利模式在这摆着,所以各大厂商都花样叠出,想方设法占领市场,比如前段时间腾讯云1元中标厦门政务云。这只是一个噱头,目的是提高市场影响力,毕竟在中国只要政府机关、国企认可,其他的中小企业都会蜂拥而上的,腾讯的市场策略还是很正确的。目前从全球来看,云计算这一块国内和美国的差距并不是很大,美国有AWS(亚马逊)、Azure(微软),国内有阿里云、腾讯云、百度云、华为云、京东云等等,只要是规模大点的互联网企业,都整出一套云计算的产品出来。这里面阿里云技术积累最雄厚,当然市场份额也是最高的,费用也最高。阿里云提供的付费方式有好多种,比如按服务器配置计算,按CPU、内存、硬盘的大小进行收费,比如按流量进行收费,出口带宽10M、20M不等,比如按企业级服务收费,可以提供MqSql数据库服务、Redis服务、大数据计算服务、EDAS服务治理平台等等,提供的产品真是丰富,总有一款适合你。我用过阿里云的Windows服务器和Linux服务器,还是比较稳定的,内置轻骑兵安全平台,比如有别的用户攻击你的服务器,阿里就会发短信,这还是不错的服务。
说一下这个EDAS平台,当然这一块不是给阿里做广告啊,确实很有用。因为现在随着互联网企业还有传统企业业务规模的不断扩大,都在整合企业内部的资源,提供服务化的接口。在2005年左右提出的企业服务总线进行业务重组,现在慢慢变成现实了,只不过以另外一种方式。EDAS平台目前提供两种方式的服务治理框架,一个是Dubbo,阿里2011年开源的服务治理框架,国内用的比较多,以RPC服务调用的方式,性能也比较好,只不过这东西长久不更新了,而且对RESTFul这种接口支持不好。后面我再讲微服务时主要说这个。另一个是HSF框架(High Speed Framework),简称好舒服。这个国内除了阿里,其余企业好像都没用,主要是这个是阿里原厂生产,没有开源,别的也没法用。这两个框架可以对企业内部提供的服务进行监控、治理,还是比较有用的。国家电网的SGERP架构正在采购阿里私有云,打造内部的服务治理框架。
云计算的体系结构如下图所示:
共分为三层,IaaS、PaaS、SaaS
微服务
微服务从2016年开始火起来了,而且非常非常火,基本任何技术论坛研讨都会讨论这个话题,各个公司的技术总监都在考虑怎么通过微服务对自己公司的业务架构进行改造。
其实这个东西不是新事物,像阿里、腾讯很早之前就开始用了。举个例子,什么是微服务,比如我有一笔订单,订单子系统、客服子系统、物流子系统都想查这个订单的状态,这就需要一个服务来单独提供,而不是说这个子系统直连数据库,查订单状态。像能提供服务接口的方式有很多,比如WebService、RPC、RESTFul等等,而且要支持各种平台、各种语言的调用,比如Java、C++、Python、PHP、Ruby等等。WebService是一个通用的接口提供方式,但是太笨重了,而且性能问题是很大的瓶颈,所以互联网公司是基本不用这东西的。有技术积累的公司内部好多都在用RPC方式,即Remote Procedure Call,远程过程调用,支持这种技术的有Thrift(Facebook提供),hessian,这两种技术都比较容易整合进来,但是对这些提供接口的监控、治理就没有了,就是说一旦服务接口很多,访问量很大,管理接口是个大问题。阿里的Dubbo是一个服务治理平台,国内的多数公司内部的服务治理框架也都是Dubbo,就是阿里系。这个框架一个大的问题是对RESTFul支持不好,简单地说就是不支持,当当对Dubbo改造后变成Dubbox,才渐渐支持RESTFul。
中国是碰到问题,先找轮子,即使不好用,也对付着用,反正轮子不是我发明的,有问题也是轮子的事,国外是轮子不好用,那我就造一个轮子,一直修改到我认为好用为止。所以新的轮子应运而生,SpringCloud。这是一整套轮子啊,涉及服务治理的各个方面都包含了,缺点就是用只能用java开发,不过对国内大多数人是好事,没有选择就是最好的选择。SpringCloud的基础是SpringBoot,SpringBoot的基础是Spring,所以没有Spring的基础,上层就是镜花水月。
我前段时间深入学习了SpringCloud,完全颠覆了对web开发的认识,等于是进入了一个新的开发世界。认识了什么是服务注册与发现、什么是服务网关、什么是客户端的负载均衡、什么是熔断、什么是降级,很多新名词。以往碰到系统访问人多,就是加服务器,但是服务器总有上限,如果到达上限,怎么优化,怎么排队就不清楚了。
这里微服务就说一个概念,就是把以前的单应用,通过业务逻辑的划分,拆成多个应用,每个应用对外提供相对独立的服务,供其他应用调用。简单来讲,就是以前我们自己写方法调数据库查结果,改为调用服务来获取结果,简化流程。
容器
容器是最近两年才出来的,虚拟化的产物,确实很高端,能解决服务器资源利用和简化部署的问题。比如现在花了10万买了一个PC服务器,内存256G,2C12核,该怎么利用这个服务器,让它发挥最大性能呢?以前是做虚拟化,比如用VMWare里面建30个虚拟机,每个虚拟机8G内存,4核CPU,这样一看,就能把服务器利用的比较好,而且各个虚拟机相互独立,不影响。但是经过实践检验,这些虚拟机的整理利用率并不高。因此容器技术应运而生。
容器看字面意思就是一个大的杯子,这里面可以放各种各样的东西,相互之间不影响,移动也方便。容器的原理也基本差不多,就是一个小虚拟机,借助于linux的文件系统,每个容器就是一小块区域,里面可以设置内存、空间、还有对应的应用等。举个例子,现在我想要部署一个web应用,以前需要什么呢?linux+weblogic+jdk+应用等,需要整个完整的linux环境加应用,加起来得好几G的空间。现在呢,只需要一个jdk+tomcat+加一个应用即可,很小大概100多M,整个打包成一个Docker,而且利用自动化部署工具,一次可以启动100个。所以现在的这个PC服务器就可以部署至少200个Docker,前端利用Nginx或者服务发现等做负载均衡。整体的对外性能就会大很多了。