专注于互联网技术研究与分享的IT研究会,喜欢可以点击【关注】;把经验传递给有梦想的人;
00-1010
云架构技术栈
2006年8月9日,谷歌CEO埃里克施密特在SES圣何塞2006大会上首次提出云计算的概念。它是云计算、分布式计算、并行计算、效用技术、网络存储、虚拟化和负载均衡等传统计算机和网络技术发展和融合的产物。目的是通过基于网络的计算共享软件/硬件。
并根据需要提供给计算机和其他系统。
什么是云
从三个方面了解架构。
首先是IT架构,其实就是计算、网络和存储。这是云架构师的基本功,也是大多数传统云架构师应该掌握的第一部分。一个设计良好的IT架构可以提高系统的可靠性,减轻运维负担。数据中心、虚拟化、云平台、容器平台都属于IT架构的范畴。
第二是应用架构。随着应用从传统应用向互联网应用的转变,仅仅提高资源的灵活性是不够的。经常发生的情况是,创建了大量的机器,但仍然无法支持高并发流量。因此,基于微服务的互联网架构越来越成为云架构师的必备技能。一个设计良好的应用架构可以实现快速迭代和高并发。数据库、缓存和消息队列等PaaS,以及基于SpringCloud和Dubbo的微服务框架都属于应用架构的范畴。
第三是数据架构。数据已经成为人工智能时代的核心资产。在做互联网转型的同时,往往进行数字化转型,从战略上进行数据采集,这就需要云架构师同时思考大数据。自觉搭建统一数据平台,赋予数据数字化运营。搜索引擎、Hadoop、Spark、HBase、人工智能都属于数据架构的范畴。
云技术堆栈
从系统的角度来看,架构分为六个层次。
1.基础设施层:在数据中心,会有大量的机架和服务器,服务器之间通过交换机和路由器连接。有些应用程序如Oracle)需要部署在物理机器上。为了方便管理,会在物理机上部署虚拟化,比如Vmware,可以将复杂的物理机运维简化为灵活的虚拟机运维。虚拟化采用的运维模式大多由运维部门管理。当一个公司有多个部门时,良好的租户管理、基于配额和服务质量的资源控制、基于VPC的网络规划等。经常被引入,以实现从运维集中管理到租户自助服务模式的转换。诞生于公有云的OpenStack在这方面做得很好。随着应用架构重要性的不断增加,对标准化交付和灵活扩展的需求也在不断增加。容器是最多的软件交付容器,可以实现基于映像的跨环境迁移。Kubernetes是集装箱管理平台事实上的标准。
2.数据层:也就是一个应用的钟君阵营,如果是传统的应用,可能会用到Oracle,使用大量的存储过程,有大量的表联合查询,而且成本往往比较高。但是,对于高并发的互联网应用,微服务需要拆分,并且会有很多数据库实例。使用开源Mysql是常见的选择。大量的存储过程和联合查询往往会使微服务无法拆分,性能会很差。因此,有必要将微服务放在应用层来做复杂的业务逻辑。数据库表和索引的设计非常重要。当并发量较大时,需要进行横向扩展,这需要基于分布式数据库和良好的基于单个数据库的表和索引设计。对于结构灵活的数据,可以使用MongoDB数据库,具有良好的横向扩展能力。对于大量的联合查询需求,可以使用ElasticSearch等搜索引擎,速度更快,更灵活。
3.中间件层:因为数据库层往往需要保证数据不丢失,一些事务不丢失,所以并发性能不可能很高,所以我们常说数据库是中国的军营,所有的请求都不能到这里来,所以我们需要一个缓存层来拦截大部分的热请求。Memcached适合简单的键值存储,内存利用率高。而且由于多核处理,对于大数据有很好的性能。然而,缺点是显而易见的。严格来说,Memcached没有集群机制,横向扩展完全依赖于客户端。另外,Memcached不能持久化。一旦数据挂机,就会丢失。如果想要实现高可用性,还需要客户端做双写。Redis具有丰富的数据结构,提供持久化功能、成熟的主备同步和故障转移功能,从而保证高可用性。另外,微服务拆分后,有时候处理一个订单会经过很多服务,处理过程会比较慢。这时就需要使用消息队列,使服务之间的调用成为对消息的订阅,实现异步处理。RabbitMQ和Kafka是常用的消息队列。当事件很重要时,将通过与数据库相结合来实现可靠的消息队列。
4.基本服务层:有时它变成了中间层,抽象出一般的功能来为服务提供原子化接口。这样,上层就可以根据业务需求灵活组合这些原子化的接口,灵活响应业务需求的变化,实现能力的复用和数据的统一管理,如用户数据、支付数据等,不会分散到各种应用中。此外,基础服务层被称为应用程序和数据库以及缓存之间的分界线,所有应用程序都不应该直接连接到数据库。一旦有子数据库和子表,数据库迁移,缓存类型改变等。影响将非常大,几乎不可能实施。如果底层的这些变化在基础服务层被拦截,而上层只使用基础服务层的接口,那么底层的变化对上层来说将是透明的,可以逐渐演化。
五
、第五个层次是业务服务层,或者组合服务层,大部分的业务逻辑都是在这个层面实现,业务逻辑比较面向用户,因而会经常改变,所以需要组合基础服务的接口进行实现。在这一层,会经常进行服务的拆分,实现开发独立,上线独立,扩容独立,容灾降级独立。微服务的拆分不应该是一个运动,而应该是一个遇到耦合痛点的时候,不断解决,不断演进的一个过程。微服务拆分之后,有时候需要通过分布式事务,保证多个操作的原子性,也是在组合服务层来实现的。
6、用户接口层:也即对终端客户呈现出来的界面和APP,但是却不仅仅是界面这么简单。这一层有时候称为接入层。在这一层,动态资源和静态资源应该分离,静态资源应该在接入层做缓存,使用CDN进行缓存。也应该UI和API分离,界面应该通过组合API进行数据拼装。API会通过统一的API网关进行统一的管理和治理,一方面后端组合服务层的拆分对APP是透明的,一方面当并发量比较大的时候,可以在这一层实现限流和降级。
为了支撑这六个层次,在左侧是一些公共能力。
持续集成和持续发布是保证微服务拆分过程中的快速迭代,以及变更后保证功能不变的,不引入新的Bug。
服务发现和服务治理是微服务之间互相的调用,以及调用过程中出现异常情况下的熔断,限流,降级策略。
大数据和人工智能是通过收集各个层面的数据,例如用户访问数据,用户下单数据,客服询问数据等,结合统一的中台,对数据进行分析,实现智能推荐。
监控是基础设施的监控和应用的监控,发现资源层面的问题以及应用调用的问题。
IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;