云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新型应用的数据库架构。
应用架构的变迁——为什么我们需要超级MySQL?POLARDB跟MySQL是100%兼容的,有超越MySQL很多倍的性能,以及单实例最大100TB的超大存储空间,可以理解为阿里自研的超级MySQL。那么我们为什么要打造这样一款超级MySQL呢?我们理解这是应用架构进行互联网分布式变迁的必然结果。首先我们需要回顾一下应用架构的变迁的历史,从最早的CS架构到BS架构,从J2EE到Spring/Struts/Hibernate,再到现在的微服务架构,经历了很多代的架构转型。从传统应用的业务架构到互联网分布式的应用架构,在方方面面都发生了变化。从资源层,到数据层,中间件,应用的发布封装以及应用的框架,开发运维的角度都在发生了互联网分布式变迁。
资源层:传统应用会使用X86 ,小机以及存储设备;互联网分布式应用在使用公有云,私有云,混合云等。数据层:传统应用会使用Oracle,DB2等集中化的商业数据库,互联网应用使用的是MySQL,Redis,HBase这样的分布式数据库,他们不需要集中化的存储设备。中间件:传统应用会使用WebLogic,WebSphere等,互联网应用在向微服务架构转型中通常会使用Swarm,K8S,Mesos。应用发布封装:传统应用会使用JAVA开发并发布成war/ear文件封装,再发布到中间件。微服务架构通常会将应用发布成容器的镜像。应用框架:传统应用通常会使用Spring,Struts,hibernate来开发,而目前互联网分布式应用更多使用的是SpringCloud, Double, EDAS等微服务架构。开发运维:传统应用会使用可控的发布,保守的运维,新功能上线需要数周,甚至数月时间;互联网分布式架构更多使用的是DevOps持续集成,敏捷快速迭代。我们理解,互联网分布式应用发生这些架构的改变,目标都是使业务更加敏捷,更加具有弹性,能承载来自互联网的高并发压力。在创新架构下,业务应用可以通过微服务的方式随时进行横向扩展,但压力并不会被处理掉,负载会直接透传到数据层面,解决了应用弹性的问题,反而对数据库产生了更大的挑战。互联网的分布式架构要求数据库更加敏捷,拥有更好的弹性以及更低的成本。(传统应用中,一个应用可能只需要一个数据库作承载,但在互联网分布式应用下,进行了微服务改造之后,一个业务系统可能就需要数十个甚至上百个数据库去承载,因此对成本也提出了要求。)
实战——阿里云数据库为业务架构变迁做好准备目前,阿里云的数据库形态已经覆盖了互联网中99%的业务场景。关系型数据库包括有MySQL,SQL Server,PG,POLARDB。NoSQL产品家族包括Redis,MongoDB,HBase等。同时具备混合分析型的数据仓库,分布式数据库DRDS,以及数据库服务于工具(DTS,DBS,CloudDBA,DMS等)。
演进路线阿里云上提供了这么多的数据库产品,在实际应用中该如何进行选择呢?我们已经为业务的快速发展和更新迭代做好了准备。这是我们建议的应用架构的演进路线:在业务的初期,建议选择MySQL来快速构建业务应用。当成长起来之后,独立MySQL无法承载更大业务压力的时候,可以基于MySQL做读写分离,不需要对应用做任何改造。我们进入快速成长期,读写分离也无法承载业务需求时,可以无缝迁移到POLARDB,迁移中不需要对业务系统做任何的更改,而且POLARDB的读写分离通过共享存储消除了复制延迟,更适合对数据一致性有更高要求的场景。当业务进一步发展壮大期间,还可以在POLARDB上做垂直拆分。垂直拆分是指将业务模块垂直拆分到不同数据库实例,分到多个独立数据库中去,比如分成用户库,订单库,仓储库等,从而用更多的独立数据库联合来应对业务负载的压力。当业务发展到象淘宝这么大的规模和体量,就需要采用DRDS进行分布式改造、跨机房多活,以及根据业务拆分做单元化改造,这正是阿里淘系应用已经走过并行之有效的演进道路。
应用链路的优化——自动读写分离,短连接优化我们使用数据库代理来进行链路访问层的优化。访问数据库的标准模式是直接访问主实例和只读实例。在这种模式下需要在业务层面做读写分离的逻辑拆分。我们提供了代理模式,让业务层和数据库层完全解耦。在访问数据库时,不需要直接连接数据库实例,而是连接对业务完全透明的Proxy,它接收到SQL请求后会自动化做读写分离,把所有写操作路由到主实例,并把读操作负载均衡的路由到只读实例上,从而实现对业务透明的自动化读写分离。代理模式除了实现读写分离外,还可以进行故障数据库的透明切换。不论是标准模式还是代理模式,当主实例发生故障后,都可以自动切换到备份的实例上,保证数据库的可用性。但在标准模式中,切换后业务需要进行数据库重连,但通过Proxy,业务应用不需要重连,感受不到高可用切换。同时,代理模式还提供了短连接优化。举例来说,如果业务是使用PHP开发,它连接数据库就是采用短链接的方式,在访问数据库时每次连接都会产生connection,使得数据库在处理连接池上不堪重负。Proxy可以将短链接转化成长链接,并自主维护连接池。同时,代理模式还提供了防暴力破解的功能。比如Proxy可以检测到某个IP不停的尝试重输密码,并主动进行屏蔽。
实时分析数据仓库——POLARMPP,POLARDB最佳搭档数据的处理可以分成数据库生态和大数据生态。数据库生态适合于处理交易订单等数据一致性要求强的场景,但在处理能力和处理量级上不会特别大。比如订单量在1TB、2TB级别时,还可以使用,但数量一旦增长到3TB~5TB时,单库的性能就会出现非常大的瓶颈,此时复杂的分析查询就会使得数据库不堪重负。通常的做法是采用大数据生态,通过ETL或数据复制的方式把在线事务处理产生的数据复制到Hadoop生态中进行数据实时分析。在Hadoop 生态中,标准方式是利用MapReduce或Spark来做数据分析,但开发人员并不习惯MR或Spark,也不喜欢使用Scala语言,他们还是习惯于使用SQL。所以在这种模式下,经常还要给开发人员准备Hive、Impla等类SQL组件,让研发人员仍然可以使用SQL来处理数据。这种方式存在的问题,在于在线事务处理和离线数据仓库之间有延迟,少则几秒,多则几分钟甚至几小时。并且数据实际上存了两份,并不经济。
针对这种情况,我们提供了POLAR MPP和HybridDB来解决,它可以很好的处理数据的写入,提供百万级的TPS,非常适合用于存储用户的行为、标签、Log日志等。这种模式可以对百亿级的大表做出毫秒级的响应,对多表关联做复杂的聚合,做多值的子列,全文检索。最重要的是,它可以和POLARDB共用一份数据,极大的缓解了数据库生态和大数据生态中需要存储两份数据,并且读写存在延迟的问题。
业务场景分析——互联网创新型应用场景实践有了云原生数据库作为武器,互联网创新型的业务场景应该如何设计呢?在讲到创新型业务前,先看一下传统的采用MySQL一主N从的架构,如何构建数据仓库驱动BI报表实现商务智能。这种架构的问题是需要存储N份数据,做数据的同步复制。MySQL 的主从之间要进行数据复制,从业务库到分析库也要进行数据复制。
那么采用云原生POLARDB的系统架构应该如何设计呢?这之间,POLARDB和只读分析库构成了云原生的数据集群,由POLAR Store统一进行数据的共享存储。业务应用会把在线的业务写到POLARDB中,当POLARDB一主一从的模式不足以应对时,可以快速进行扩展,扩展成一主两从甚至N从。这种扩展区别于MySQL,他提供了敏捷性和业务弹性。如果数据量比较大,MySQL只读库的生成可能就需要数个小时的时间。而不管数据量多大,在POLARDB生态下创建一个只读库只需要分钟级的时间。并且只需要一份数据就可以通过POLARMPP来驱动业务报表。
云原生架构带来如下的业务收益:
云原生数据库如何打造业务弹性
标签:私有 方式 只读 png 暴力 商务 容器 war 分享图片
小编还为您整理了以下内容,可能对您也有帮助:
云原生数据库如何打造业务弹性
摘要: 云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新型应用的数据库架构。
云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新型应用的数据库架构。
应用架构的变迁——为什么我们需要超级MySQL?
POLARDB跟MySQL是100%兼容的,有超越MySQL很多倍的性能,以及单实例最大100TB的超大存储空间,可以理解为阿里自研的超级MySQL。那么我们为什么要打造这样一款超级MySQL呢?我们理解这是应用架构进行互联网分布式变迁的必然结果。首先我们需要回顾一下应用架构的变迁的历史,从最早的CS架构到BS架构,从J2EE到Spring/Struts/Hibernate,再到现在的微服务架构,经历了很多代的架构转型。从传统应用的业务架构到互联网分布式的应用架构,在方方面面都发生了变化。从资源层,到数据层,中间件,应用的发布封装以及应用的框架,开发运维的角度都在发生了互联网分布式变迁。
资源层:传统应用会使用X86 ,小机以及存储设备;互联网分布式应用在使用公有云,私有云,混合云等。
数据层:传统应用会使用Oracle,DB2等集中化的商业数据库,互联网应用使用的是MySQL,Redis,HBase这样的分布式数据库,他们不需要集中化的存储设备。
中间件:传统应用会使用WebLogic,WebSphere等,互联网应用在向微服务架构转型中通常会使用Swarm,K8S,Mesos。
应用发布封装:传统应用会使用JAVA开发并发布成war/ear文件封装,再发布到中间件。微服务架构通常会将应用发布成容器的镜像。
应用框架:传统应用通常会使用Spring,Struts,hibernate来开发,而目前互联网分布式应用更多使用的是SpringCloud, Double, EDAS等微服务架构。
开发运维:传统应用会使用可控的发布,保守的运维,新功能上线需要数周,甚至数月时间;互联网分布式架构更多使用的是DevOps持续集成,敏捷快速迭代。
我们理解,互联网分布式应用发生这些架构的改变,目标都是使业务更加敏捷,更加具有弹性,能承载来自互联网的高并发压力。在创新架构下,业务应用可以通过微服务的方式随时进行横向扩展,但压力并不会被处理掉,负载会直接透传到数据层面,解决了应用弹性的问题,反而对数据库产生了更大的挑战。互联网的分布式架构要求数据库更加敏捷,拥有更好的弹性以及更低的成本。(传统应用中,一个应用可能只需要一个数据库作承载,但在互联网分布式应用下,进行了微服务改造之后,一个业务系统可能就需要数十个甚至上百个数据库去承载,因此对成本也提出了要求。)
实战——阿里云数据库为业务架构变迁做好准备
目前,阿里云的数据库形态已经覆盖了互联网中99%的业务场景。关系型数据库包括有MySQL,SQL Server,PG,POLARDB。NoSQL产品家族包括Redis,MongoDB,HBase等。同时具备混合分析型的数据仓库,分布式数据库DRDS,以及数据库服务于工具(DTS,DBS,CloudDBA,DMS等)。
演进路线
阿里云上提供了这么多的数据库产品,在实际应用中该如何进行选择呢?我们已经为业务的快速发展和更新迭代做好了准备。这是我们建议的应用架构的演进路线:在业务的初期,建议选择MySQL来快速构建业务应用。当成长起来之后,独立MySQL无法承载更大业务压力的时候,可以基于MySQL做读写分离,不需要对应用做任何改造。我们进入快速成长期,读写分离也无法承载业务需求时,可以无缝迁移到POLARDB,迁移中不需要对业务系统做任何的更改,而且POLARDB的读写分离通过共享存储消除了复制延迟,更适合对数据一致性有更高要求的场景。当业务进一步发展壮大期间,还可以在POLARDB上做垂直拆分。垂直拆分是指将业务模块垂直拆分到不同数据库实例,分到多个独立数据库中去,比如分成用户库,订单库,仓储库等,从而用更多的独立数据库联合来应对业务负载的压力。当业务发展到象淘宝这么大的规模和体量,就需要采用DRDS进行分布式改造、跨机房多活,以及根据业务拆分做单元化改造,这正是阿里淘系应用已经走过并行之有效的演进道路。
应用链路的优化——自动读写分离,短连接优化
我们使用数据库代理来进行链路访问层的优化。访问数据库的标准模式是直接访问主实例和只读实例。在这种模式下需要在业务层面做读写分离的逻辑拆分。我们提供了代理模式,让业务层和数据库层完全解耦。在访问数据库时,不需要直接连接数据库实例,而是连接对业务完全透明的Proxy,它接收到SQL请求后会自动化做读写分离,把所有写操作路由到主实例,并把读操作负载均衡的路由到只读实例上,从而实现对业务透明的自动化读写分离。代理模式除了实现读写分离外,还可以进行故障数据库的透明切换。不论是标准模式还是代理模式,当主实例发生故障后,都可以自动切换到备份的实例上,保证数据库的可用性。但在标准模式中,切换后业务需要进行数据库重连,但通过Proxy,业务应用不需要重连,感受不到高可用切换。同时,代理模式还提供了短连接优化。举例来说,如果业务是使用PHP开发,它连接数据库就是采用短链接的方式,在访问数据库时每次连接都会产生connection,使得数据库在处理连接池上不堪重负。Proxy可以将短链接转化成长链接,并自主维护连接池。同时,代理模式还提供了防暴力破解的功能。比如Proxy可以检测到某个IP不停的尝试重输密码,并主动进行屏蔽。
实时分析数据仓库——POLARMPP,POLARDB最佳搭档
数据的处理可以分成数据库生态和大数据生态。数据库生态适合于处理交易订单等数据一致性要求强的场景,但在处理能力和处理量级上不会特别大。比如订单量在1TB、2TB级别时,还可以使用,但数量一旦增长到3TB~5TB时,单库的性能就会出现非常大的瓶颈,此时复杂的分析查询就会使得数据库不堪重负。通常的做法是采用大数据生态,通过ETL或数据复制的方式把在线事务处理产生的数据复制到Hadoop生态中进行数据实时分析。在Hadoop 生态中,标准方式是利用MapRece或Spark来做数据分析,但开发人员并不习惯MR或Spark,也不喜欢使用Scala语言,他们还是习惯于使用SQL。所以在这种模式下,经常还要给开发人员准备Hive、Impla等类SQL组件,让研发人员仍然可以使用SQL来处理数据。这种方式存在的问题,在于在线事务处理和离线数据仓库之间有延迟,少则几秒,多则几分钟甚至几小时。并且数据实际上存了两份,并不经济。
针对这种情况,我们提供了POLAR MPP和HybridDB来解决,它可以很好的处理数据的写入,提供百万级的TPS,非常适合用于存储用户的行为、标签、Log日志等。这种模式可以对百亿级的大表做出毫秒级的响应,对多表关联做复杂的聚合,做多值的子列,全文检索。最重要的是,它可以和POLARDB共用一份数据,极大的缓解了数据库生态和大数据生态中需要存储两份数据,并且读写存在延迟的问题。
业务场景分析——互联网创新型应用场景实践
有了云原生数据库作为武器,互联网创新型的业务场景应该如何设计呢?在讲到创新型业务前,先看一下传统的采用MySQL一主N从的架构,如何构建数据仓库驱动BI报表实现商务智能。这种架构的问题是需要存储N份数据,做数据的同步复制。MySQL 的主从之间要进行数据复制,从业务库到分析库也要进行数据复制。
那么采用云原生POLARDB的系统架构应该如何设计呢?这之间,POLARDB和只读分析库构成了云原生的数据集群,由POLAR Store统一进行数据的共享存储。业务应用会把在线的业务写到POLARDB中,当POLARDB一主一从的模式不足以应对时,可以快速进行扩展,扩展成一主两从甚至N从。这种扩展区别于MySQL,他提供了敏捷性和业务弹性。如果数据量比较大,MySQL只读库的生成可能就需要数个小时的时间。而不管数据量多大,在POLARDB生态下创建一个只读库只需要分钟级的时间。并且只需要一份数据就可以通过POLARMPP来驱动业务报表。
云原生架构带来如下的业务收益:
业务兼容,不改应用:只要是利用MySQL开发的业务系统,可以1. 无缝迁移到POLARDB上。
读写分离:通过POLARDB,一份数据即可实现多个节点的读写分离,并且支持分钟级的扩展。如果用MySQL 实现读写分离,需要通过数据复制生成多个只读库,浪费时间,浪费空间。
实时分析,数据共享:在数据仓库和BI分析业务中,也只需要一份数据,不需要进行数据复制。
只读实例共享一份数据:由于存储只需要一份,带来了更好的性价比,以一主五从的架构为例,POLARDB的价格要比MySQL低44%。它在提供更强大的性能的基础上,提供了更高的性价比。
毫秒级的延迟:由于主库和从库共享一份数据,因此中间只存在毫秒级的延迟。当主节点发生故障时,可以保证切换中的零数据丢失。
Session级读写分离的数据一致性:在金融等一致性要求高的业务场景下,对读一致性的要求非常高,很难容忍秒级甚至毫秒级的数据延迟。利用POLARDB可以实现session内的数据一致性读。
按需付费,秒级备份:在使用MySQL的时候,如果预计要使用500GB的容量,我们需要买500G的存储空间,但实际上数据可能只占了不到100GB,但还是需要为500GB的预留容量买单。但POLARDB不需要做空间预留,存储按需付费。同时,POLARDB通过数据快照可以在秒级实现备份和恢复,更利于我们做数据库安全运维,带来更多价值。
云原生数据库如何打造业务弹性
标签:私有方式只读png暴力商务容器war分享图片
云原生数据库如何打造业务弹性
摘要: 云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新型应用的数据库架构。
云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新型应用的数据库架构。
应用架构的变迁——为什么我们需要超级MySQL?
POLARDB跟MySQL是100%兼容的,有超越MySQL很多倍的性能,以及单实例最大100TB的超大存储空间,可以理解为阿里自研的超级MySQL。那么我们为什么要打造这样一款超级MySQL呢?我们理解这是应用架构进行互联网分布式变迁的必然结果。首先我们需要回顾一下应用架构的变迁的历史,从最早的CS架构到BS架构,从J2EE到Spring/Struts/Hibernate,再到现在的微服务架构,经历了很多代的架构转型。从传统应用的业务架构到互联网分布式的应用架构,在方方面面都发生了变化。从资源层,到数据层,中间件,应用的发布封装以及应用的框架,开发运维的角度都在发生了互联网分布式变迁。
资源层:传统应用会使用X86 ,小机以及存储设备;互联网分布式应用在使用公有云,私有云,混合云等。
数据层:传统应用会使用Oracle,DB2等集中化的商业数据库,互联网应用使用的是MySQL,Redis,HBase这样的分布式数据库,他们不需要集中化的存储设备。
中间件:传统应用会使用WebLogic,WebSphere等,互联网应用在向微服务架构转型中通常会使用Swarm,K8S,Mesos。
应用发布封装:传统应用会使用JAVA开发并发布成war/ear文件封装,再发布到中间件。微服务架构通常会将应用发布成容器的镜像。
应用框架:传统应用通常会使用Spring,Struts,hibernate来开发,而目前互联网分布式应用更多使用的是SpringCloud, Double, EDAS等微服务架构。
开发运维:传统应用会使用可控的发布,保守的运维,新功能上线需要数周,甚至数月时间;互联网分布式架构更多使用的是DevOps持续集成,敏捷快速迭代。
我们理解,互联网分布式应用发生这些架构的改变,目标都是使业务更加敏捷,更加具有弹性,能承载来自互联网的高并发压力。在创新架构下,业务应用可以通过微服务的方式随时进行横向扩展,但压力并不会被处理掉,负载会直接透传到数据层面,解决了应用弹性的问题,反而对数据库产生了更大的挑战。互联网的分布式架构要求数据库更加敏捷,拥有更好的弹性以及更低的成本。(传统应用中,一个应用可能只需要一个数据库作承载,但在互联网分布式应用下,进行了微服务改造之后,一个业务系统可能就需要数十个甚至上百个数据库去承载,因此对成本也提出了要求。)
实战——阿里云数据库为业务架构变迁做好准备
目前,阿里云的数据库形态已经覆盖了互联网中99%的业务场景。关系型数据库包括有MySQL,SQL Server,PG,POLARDB。NoSQL产品家族包括Redis,MongoDB,HBase等。同时具备混合分析型的数据仓库,分布式数据库DRDS,以及数据库服务于工具(DTS,DBS,CloudDBA,DMS等)。
演进路线
阿里云上提供了这么多的数据库产品,在实际应用中该如何进行选择呢?我们已经为业务的快速发展和更新迭代做好了准备。这是我们建议的应用架构的演进路线:在业务的初期,建议选择MySQL来快速构建业务应用。当成长起来之后,独立MySQL无法承载更大业务压力的时候,可以基于MySQL做读写分离,不需要对应用做任何改造。我们进入快速成长期,读写分离也无法承载业务需求时,可以无缝迁移到POLARDB,迁移中不需要对业务系统做任何的更改,而且POLARDB的读写分离通过共享存储消除了复制延迟,更适合对数据一致性有更高要求的场景。当业务进一步发展壮大期间,还可以在POLARDB上做垂直拆分。垂直拆分是指将业务模块垂直拆分到不同数据库实例,分到多个独立数据库中去,比如分成用户库,订单库,仓储库等,从而用更多的独立数据库联合来应对业务负载的压力。当业务发展到象淘宝这么大的规模和体量,就需要采用DRDS进行分布式改造、跨机房多活,以及根据业务拆分做单元化改造,这正是阿里淘系应用已经走过并行之有效的演进道路。
应用链路的优化——自动读写分离,短连接优化
我们使用数据库代理来进行链路访问层的优化。访问数据库的标准模式是直接访问主实例和只读实例。在这种模式下需要在业务层面做读写分离的逻辑拆分。我们提供了代理模式,让业务层和数据库层完全解耦。在访问数据库时,不需要直接连接数据库实例,而是连接对业务完全透明的Proxy,它接收到SQL请求后会自动化做读写分离,把所有写操作路由到主实例,并把读操作负载均衡的路由到只读实例上,从而实现对业务透明的自动化读写分离。代理模式除了实现读写分离外,还可以进行故障数据库的透明切换。不论是标准模式还是代理模式,当主实例发生故障后,都可以自动切换到备份的实例上,保证数据库的可用性。但在标准模式中,切换后业务需要进行数据库重连,但通过Proxy,业务应用不需要重连,感受不到高可用切换。同时,代理模式还提供了短连接优化。举例来说,如果业务是使用PHP开发,它连接数据库就是采用短链接的方式,在访问数据库时每次连接都会产生connection,使得数据库在处理连接池上不堪重负。Proxy可以将短链接转化成长链接,并自主维护连接池。同时,代理模式还提供了防暴力破解的功能。比如Proxy可以检测到某个IP不停的尝试重输密码,并主动进行屏蔽。
实时分析数据仓库——POLARMPP,POLARDB最佳搭档
数据的处理可以分成数据库生态和大数据生态。数据库生态适合于处理交易订单等数据一致性要求强的场景,但在处理能力和处理量级上不会特别大。比如订单量在1TB、2TB级别时,还可以使用,但数量一旦增长到3TB~5TB时,单库的性能就会出现非常大的瓶颈,此时复杂的分析查询就会使得数据库不堪重负。通常的做法是采用大数据生态,通过ETL或数据复制的方式把在线事务处理产生的数据复制到Hadoop生态中进行数据实时分析。在Hadoop 生态中,标准方式是利用MapRece或Spark来做数据分析,但开发人员并不习惯MR或Spark,也不喜欢使用Scala语言,他们还是习惯于使用SQL。所以在这种模式下,经常还要给开发人员准备Hive、Impla等类SQL组件,让研发人员仍然可以使用SQL来处理数据。这种方式存在的问题,在于在线事务处理和离线数据仓库之间有延迟,少则几秒,多则几分钟甚至几小时。并且数据实际上存了两份,并不经济。
针对这种情况,我们提供了POLAR MPP和HybridDB来解决,它可以很好的处理数据的写入,提供百万级的TPS,非常适合用于存储用户的行为、标签、Log日志等。这种模式可以对百亿级的大表做出毫秒级的响应,对多表关联做复杂的聚合,做多值的子列,全文检索。最重要的是,它可以和POLARDB共用一份数据,极大的缓解了数据库生态和大数据生态中需要存储两份数据,并且读写存在延迟的问题。
业务场景分析——互联网创新型应用场景实践
有了云原生数据库作为武器,互联网创新型的业务场景应该如何设计呢?在讲到创新型业务前,先看一下传统的采用MySQL一主N从的架构,如何构建数据仓库驱动BI报表实现商务智能。这种架构的问题是需要存储N份数据,做数据的同步复制。MySQL 的主从之间要进行数据复制,从业务库到分析库也要进行数据复制。
那么采用云原生POLARDB的系统架构应该如何设计呢?这之间,POLARDB和只读分析库构成了云原生的数据集群,由POLAR Store统一进行数据的共享存储。业务应用会把在线的业务写到POLARDB中,当POLARDB一主一从的模式不足以应对时,可以快速进行扩展,扩展成一主两从甚至N从。这种扩展区别于MySQL,他提供了敏捷性和业务弹性。如果数据量比较大,MySQL只读库的生成可能就需要数个小时的时间。而不管数据量多大,在POLARDB生态下创建一个只读库只需要分钟级的时间。并且只需要一份数据就可以通过POLARMPP来驱动业务报表。
云原生架构带来如下的业务收益:
业务兼容,不改应用:只要是利用MySQL开发的业务系统,可以1. 无缝迁移到POLARDB上。
读写分离:通过POLARDB,一份数据即可实现多个节点的读写分离,并且支持分钟级的扩展。如果用MySQL 实现读写分离,需要通过数据复制生成多个只读库,浪费时间,浪费空间。
实时分析,数据共享:在数据仓库和BI分析业务中,也只需要一份数据,不需要进行数据复制。
只读实例共享一份数据:由于存储只需要一份,带来了更好的性价比,以一主五从的架构为例,POLARDB的价格要比MySQL低44%。它在提供更强大的性能的基础上,提供了更高的性价比。
毫秒级的延迟:由于主库和从库共享一份数据,因此中间只存在毫秒级的延迟。当主节点发生故障时,可以保证切换中的零数据丢失。
Session级读写分离的数据一致性:在金融等一致性要求高的业务场景下,对读一致性的要求非常高,很难容忍秒级甚至毫秒级的数据延迟。利用POLARDB可以实现session内的数据一致性读。
按需付费,秒级备份:在使用MySQL的时候,如果预计要使用500GB的容量,我们需要买500G的存储空间,但实际上数据可能只占了不到100GB,但还是需要为500GB的预留容量买单。但POLARDB不需要做空间预留,存储按需付费。同时,POLARDB通过数据快照可以在秒级实现备份和恢复,更利于我们做数据库安全运维,带来更多价值。
云原生数据库如何打造业务弹性
标签:私有方式只读png暴力商务容器war分享图片
阿里云李飞飞:全面向「云原生数据库2.0」演进
阿里巴巴集团副总裁,阿里云数据库产品事业部负责人李飞飞
钛媒体注:是钛媒体年终策划专题,邀请各行业TOP创业领袖一起回顾过去一年的行业变化和企业成长,同时共话新逻辑、展望2022。本文为
阿里巴巴集团副总裁,阿里云数据库产品事业部负责人李飞飞
对话钛媒体App栏目,以下为
李飞飞
对行业未来的展望。
2021年数据库行业的关键词,可以用云原生、一站式、全链路、HTAP、智能化来概括。
云深处,新世界。数据库行业最大的变化是全面向演进,阿里云打造的,将云计算领域非常重要的云原生技术和分布式技术合二为一:上层是分布式,下层以云原生的方式实现,每个分区都可以享受云原生带来弹性、高可用的能力,同时上面有分布式带来的水平拓展的能力,解决高并发可能带来的瓶颈问题。
在这个基础上,打造面向不同应用场景和需求的专属数据库和数据仓库系统,做到专库专用。同时,利用HTAP、智能化、离在线一体化等核心技术,实现数据处理与分析的融合,以及数据在不同应用场景和系统之间的自由流转。最后,通过在线数据管理平台实现一站式全链路数据管理与服务,为企业数据生产集成、实时处理与存储、分析和发现、开发和管理提供全链路、全生命周期的服务。
阿里云数据库坚持以客户需求为核心,扎根国内市场,同时积极拓展海外市场,加速出海国际化。回顾过去一年,简单从三个方面分享阿里云数据库的发展:
业务层面:
权威机构Gartner公布2021年度全球云数据库魔力象限评估结果,阿里云再次入选领导者象限,数据库综合实力稳居全球第一阵营,阿里云也是唯一被评为全球数据库领导者的中国企业。
权威市场机构IDC发布的《2020年中国关系型数据库市场研究报告》中,阿里云以超28%的市场份额排名第一,并蝉联云关系型数据库市场第一。在云关系型数据库市场上,阿里云以绝对优势领跑。
产品技术层面:
三层解耦,PolarDB将云原生进行到底。PolarDB实现三项创新:业内首次实现内存与计算、存储的三层解耦,实现内存池化,使得弹性能力呈数量级提升,并大幅降低成本;上线多主架构,进一步提升可用性、并发处理、弹性能力,高效应对像双11一样的流量洪峰;基于共享内存池的IMCI成为真正的HTAP数据库系统,可同时处理OLTP和OLAP型混合负载。
离在线一体化,AnalyticDB让数据分析实时化、在线化。AnalyticDB推出云原生+离在线一体化技术架构重大升级版本。云原生架构版本基于资源池化和弹性存储能力,结合传统MPP数据库架构、离在线一体化技术以及Serverless技术创新,实现了存储计算分离、分层存储、秒级扩缩容以及多实例数据实时共享等新特性,最高可降低10倍存储成本,大幅提升了计算和写入性能。
库仓一体,DMS让数据自由流动。发布首个一站式敏捷数据仓库解决方案,结合一站式数据管理平台DMS及云原生数据仓库AnalyticDB,实现了库仓一体的技术架构,提供在线数据实时入仓、T+1周期性快照、按需建仓等能力,数据延时低至秒级,持续赋能企业业务在线化。
开放生态层面:
正式开源PolarDB数据库,已对外开放云原生关系型数据库PolarDBforPostgreSQL及云原生分布式数据库PolarDB-X的源代码,分享自研云原生分布式核心技术,推动云原生分布式数据库发展。
过去一段时间,国家出台了《十四五数字经济发展规划》等系列,将对数字经济和基础软件的重视程度提升到了前所未有的高度。随着新一轮科技和产业变革的发展,数字经济已经深入传统互联网、制造业、金融、、电信、交通、能源、物流等各行各业,海量数据爆发式增长,数据库技术在数字经济发展的各个模块中发挥着核心作用。鼓励中国企业通过开放、公平的市场竞争方式,提升国产数据库的竞争力,国家也提供了非常好的环境。
新技术的产生,像云原生、分布式、智能化、面向物联网的多模数据的处理、安全可信、新硬件以及开源,这些维度是今天以及未来很长一段时间,各个数据库厂商会展开激烈竞争的赛道。
越来越多的企业级用户会选择云的部署方式,这为阿里云数据库进入传统政企市场提供了非常好的机遇。同时,企业对一站式全链路数据管理与服务的需求越来越强烈,让数据更简单、更易用,充分发挥数据的价值。
云原生有哪些特点?
云原生是一系列云计算技术体系和企业管理方法的集合,既包含了实现应用云原生化的方*,也包含了落地实践的关键技术。
基于云原生以上的几个特点,在容器云PaaS、DevOps、微服务治理、服务网格、API网关等等方面,时速云做的还不错,是一家全栈云原生技术服务提供商,可以了解下。
云原生有哪些特点?
云原生是一系列云计算技术体系和企业管理方法的集合,既包含了实现应用云原生化的方*,也包含了落地实践的关键技术。
基于云原生以上的几个特点,在容器云PaaS、DevOps、微服务治理、服务网格、API网关等等方面,时速云做的还不错,是一家全栈云原生技术服务提供商,可以了解下。
什么是云原生?
云原生(Cloud Native)的概念,最早是由 Pivotal 于2013年提出的。
云原生可分解为 “云”(Cloud)和 “原生”(Native)两个词。这里还隐藏了一个词—— “计算”(Computing),因为云原生本质上是一种与云计算(Cloud Computing)相同的计算方式,因此通常我们在说云原生的时候,实际上是暗指云原生计算(Cloud Native Computing)。
得益于云计算快速发展,基于云计算特性所设计的云原生应用相比传统的单体应用在安全性,扩展性,快速迭代,运维等各方便都有巨大的领先优势。
云原生自诞生依赖,已经度过了概念炒作的阶段,进入架构落地阶段,出现了云原生2.0的概念。云原生1.0与2.0最大的区别在于, 1.0的云原生是ON Cloud,即把容器、微服务、DevOps等云原生的特征堆砌到云上。这样的做法虽然实现了弹性、敏捷等,但还仅仅是解决了基础设施架构层的问题,是以资源为核心,并未实现资源效率的最大化、最优解。
而云原生2.0则是IN Cloud,是以应用为中心。除了具备云原生1.0的容器、微服务、DevOps等特征外,更强调对资源的配备。
从现在基础设施的发展情况来看,我们正在从以资源为中心的资源上云阶段向以应用为核心的应用上云阶段演进,关注点从资源云化向应用云化渗透。第一阶段,我们关注的是以资源自动化为目标的资源融合管理。第二阶段,我们关注的是以应用自动化为目标的应用敏捷管理。
相对概念阶段的云原生以及资源上云来说,云原生2.0的关注点有了以下变化:
高效的资源管理与调度:基于软硬件协同构建多元算力,为应用提供极致的覆盖逻辑、虚拟机、容器、函数等在内的多元算力;基于边云协同和分布式云架构,实现多云算力的纵向融合和横向联动,形成分布式泛在算力平台;以应用为中心,实现资源的高效管理、调度和编排,实现一键部署、一建管理和智能感知。
敏捷的应用交付与管理:通过创新应用开发模式,进一步实现应用的敏捷交付和应用的全生命周期管理,通过侵入式和非侵入式两种模式助力企业应用架构升级。
智能的业务支撑与开放:主要是如何做好数据汇聚融合和数据运营,推动数据资产化、数据业务化和业务数据化,借助AI等新技术,实现数据对业务的二次赋能,实现业务的智能升级。
完善的安全可信与合规:借助云原生对基础资源的融合纳管,在基础资源和基础设施安全的基础上,进一步打造应用、数据和业务安全。
什么是云原生?
云原生(Cloud Native)的概念,最早是由 Pivotal 于2013年提出的。
云原生可分解为 “云”(Cloud)和 “原生”(Native)两个词。这里还隐藏了一个词—— “计算”(Computing),因为云原生本质上是一种与云计算(Cloud Computing)相同的计算方式,因此通常我们在说云原生的时候,实际上是暗指云原生计算(Cloud Native Computing)。
得益于云计算快速发展,基于云计算特性所设计的云原生应用相比传统的单体应用在安全性,扩展性,快速迭代,运维等各方便都有巨大的领先优势。
云原生自诞生依赖,已经度过了概念炒作的阶段,进入架构落地阶段,出现了云原生2.0的概念。云原生1.0与2.0最大的区别在于, 1.0的云原生是ON Cloud,即把容器、微服务、DevOps等云原生的特征堆砌到云上。这样的做法虽然实现了弹性、敏捷等,但还仅仅是解决了基础设施架构层的问题,是以资源为核心,并未实现资源效率的最大化、最优解。
而云原生2.0则是IN Cloud,是以应用为中心。除了具备云原生1.0的容器、微服务、DevOps等特征外,更强调对资源的配备。
从现在基础设施的发展情况来看,我们正在从以资源为中心的资源上云阶段向以应用为核心的应用上云阶段演进,关注点从资源云化向应用云化渗透。第一阶段,我们关注的是以资源自动化为目标的资源融合管理。第二阶段,我们关注的是以应用自动化为目标的应用敏捷管理。
相对概念阶段的云原生以及资源上云来说,云原生2.0的关注点有了以下变化:
高效的资源管理与调度:基于软硬件协同构建多元算力,为应用提供极致的覆盖逻辑、虚拟机、容器、函数等在内的多元算力;基于边云协同和分布式云架构,实现多云算力的纵向融合和横向联动,形成分布式泛在算力平台;以应用为中心,实现资源的高效管理、调度和编排,实现一键部署、一建管理和智能感知。
敏捷的应用交付与管理:通过创新应用开发模式,进一步实现应用的敏捷交付和应用的全生命周期管理,通过侵入式和非侵入式两种模式助力企业应用架构升级。
智能的业务支撑与开放:主要是如何做好数据汇聚融合和数据运营,推动数据资产化、数据业务化和业务数据化,借助AI等新技术,实现数据对业务的二次赋能,实现业务的智能升级。
完善的安全可信与合规:借助云原生对基础资源的融合纳管,在基础资源和基础设施安全的基础上,进一步打造应用、数据和业务安全。
云原生有哪些优势?
云原生的优势简单来说有以下几点:
对于微服务化架构而言,拥有了更小的体积代表了未来将会是更少的下载带宽,而且更快地分发下载速度,在工作上会提高工作效率,节省更多的工作时间。
相比传统的单体应用而言,启动速度与运行效率快慢并不是重要的指标,但是对于需要快速迭代、水平扩展的云原生微服务架构应用而言,更快的启动速度就意味着更高的交付效率,和更加快速的回滚,尤其是面对较多应用的时候,可能仅仅才500ms的反应时间也会让用户感觉到延迟,从而造成用户的体验感变差。
在实际的运行中占用的资源更低,也就代表了更高的部署密度和更低的计算成本,同时,在JVM启动时需要消耗大量CPU资源对字节码进行编译,降低启动时资源消耗,可以减少资源争抢,更好保障其他应用SLA。
也就说,在如今的实际使用中,云原生应用和服务既可以用JSON来处理数据,也可以用protocol buffer 或传统的 XML 来构造数据。很大程度上满足了不同的用户需求,无论是操作,还是实际都带来极大的便利性。
云原生架构的主要特点是微服务、容器化、 DevOps 、持续交付四个主要的特点,也正因为如此它的资源是可以按照实际情况进行伸缩,这样不但提高资源的利用率,也大大降低了企业成本。
云原生架构依托于容器编排工具(K8S)与微服务的组合,应用就拥有了自动恢复能力、容错能力、故障隔离能力,让应用时刻处于可用的状态。
因为使用了容器化技术,应用运行于容器之中,应用就不需要考虑底层硬件的差异,只要是能运行容器镜像的硬件都可以运行程序,大大简化了开发工作量。同时对运维人员也非常友好,不需要再为环境问题而苦恼。
云原生有哪些优势?
云原生的优势简单来说有以下几点:
对于微服务化架构而言,拥有了更小的体积代表了未来将会是更少的下载带宽,而且更快地分发下载速度,在工作上会提高工作效率,节省更多的工作时间。
相比传统的单体应用而言,启动速度与运行效率快慢并不是重要的指标,但是对于需要快速迭代、水平扩展的云原生微服务架构应用而言,更快的启动速度就意味着更高的交付效率,和更加快速的回滚,尤其是面对较多应用的时候,可能仅仅才500ms的反应时间也会让用户感觉到延迟,从而造成用户的体验感变差。
在实际的运行中占用的资源更低,也就代表了更高的部署密度和更低的计算成本,同时,在JVM启动时需要消耗大量CPU资源对字节码进行编译,降低启动时资源消耗,可以减少资源争抢,更好保障其他应用SLA。
也就说,在如今的实际使用中,云原生应用和服务既可以用JSON来处理数据,也可以用protocol buffer 或传统的 XML 来构造数据。很大程度上满足了不同的用户需求,无论是操作,还是实际都带来极大的便利性。
云原生架构的主要特点是微服务、容器化、 DevOps 、持续交付四个主要的特点,也正因为如此它的资源是可以按照实际情况进行伸缩,这样不但提高资源的利用率,也大大降低了企业成本。
云原生架构依托于容器编排工具(K8S)与微服务的组合,应用就拥有了自动恢复能力、容错能力、故障隔离能力,让应用时刻处于可用的状态。
因为使用了容器化技术,应用运行于容器之中,应用就不需要考虑底层硬件的差异,只要是能运行容器镜像的硬件都可以运行程序,大大简化了开发工作量。同时对运维人员也非常友好,不需要再为环境问题而苦恼。
云原生相关知识?
云原生技术使企业/组织能够在公共、私有和混合云等现代动态环境中,构建和运行可扩展的应用程序。容器、服务网格、微服务、不可变基础设施和声明式 API 就是这种方法的例证。
这些技术支持具有弹性、可管理和可观察的松散耦合系统。结合强大的自动化,它们使工程师能够以最少的工作频繁且可预测地进行高影响力的更改。
云原生技术以微服务、DevOps、容器、多云业务管理为代表,目前已经成为了加速企业数字化业务高效创新、实现企业数字化转型的最佳技术支撑。
微服务实现了软件的模块化、组件化、共享化,实现了开发团队的独立化、小型化和协同化,为数 字化应用研发创新更敏捷、更高效打下了坚实的基础。
DevOps实现了软件研运过程标准统一,强化应用研发运营全周期的管理、打破部门壁垒,从应用 需求到生产运维的全流程改进和优化,结合统一工具链,实现文化、流程、工具的一致性,提升数 字化应用创新整体协同效率,提升软件交付效率。
容器技术实现了应用与资源的解耦和应用交付件的标准化,有效解决了异构环境的部署一致性问 题,促进了资源的标准化,为面向应用的服务化、自动化提供了基础。标准容器化的打包方式实现 了真正的应用可移植性,不再受限于特定的基础架构环境。
多云业务管理实现在私有云模式、混合云模式、多云模式下应用的部署、跨云迁移、应用运维和治 理,满足企业多样化 IT 资源需求,同时避免企业被云服务商绑定,实现自主可控。多云业务管理 同时可实现云端+边缘设备的应用一体化交付和管理。
云原生景观图
截图只是部分,百度搜索会有完整景观图。
云原生相关知识?
云原生技术使企业/组织能够在公共、私有和混合云等现代动态环境中,构建和运行可扩展的应用程序。容器、服务网格、微服务、不可变基础设施和声明式 API 就是这种方法的例证。
这些技术支持具有弹性、可管理和可观察的松散耦合系统。结合强大的自动化,它们使工程师能够以最少的工作频繁且可预测地进行高影响力的更改。
云原生技术以微服务、DevOps、容器、多云业务管理为代表,目前已经成为了加速企业数字化业务高效创新、实现企业数字化转型的最佳技术支撑。
微服务实现了软件的模块化、组件化、共享化,实现了开发团队的独立化、小型化和协同化,为数 字化应用研发创新更敏捷、更高效打下了坚实的基础。
DevOps实现了软件研运过程标准统一,强化应用研发运营全周期的管理、打破部门壁垒,从应用 需求到生产运维的全流程改进和优化,结合统一工具链,实现文化、流程、工具的一致性,提升数 字化应用创新整体协同效率,提升软件交付效率。
容器技术实现了应用与资源的解耦和应用交付件的标准化,有效解决了异构环境的部署一致性问 题,促进了资源的标准化,为面向应用的服务化、自动化提供了基础。标准容器化的打包方式实现 了真正的应用可移植性,不再受限于特定的基础架构环境。
多云业务管理实现在私有云模式、混合云模式、多云模式下应用的部署、跨云迁移、应用运维和治 理,满足企业多样化 IT 资源需求,同时避免企业被云服务商绑定,实现自主可控。多云业务管理 同时可实现云端+边缘设备的应用一体化交付和管理。
云原生景观图
截图只是部分,百度搜索会有完整景观图。
数字基础设施已成新趋势:云原生数据库如何解决中小企业上云关键问题
Oracle等传统数据库架构无法满足企业面临的业务挑战,电信、金融和政务等客户正在核心系统领域加速上云。基于这样的背景,6月9日,2020阿里云峰会,阿里巴巴副总裁、阿里云数据库负责人李飞飞提出,“今年要完成10000套传统数据仓库上云。”
在许多采访中,企业主们无一例外表示,新冠疫情的冲击反而加速了企业上云的步伐。诸多案例也表明,上云成为了不可避免的趋势。但在上云的过程中,技术门槛和高额的试错成本,都有可能变成压垮中小企业的稻草。
作为提供新基础设施的阿里云厂商,其角色更像是一种普惠技术的提供者。
“需要提供一项普惠技术,一是降低技术门槛,不需要学习太长时间,减轻企业上云门槛;二是价格不能太贵,否则中小企业用不起。科技从诞生到全面普及有一个S曲线,逐渐坡爬到过程,技术越成熟,成本越低,人群越广。”商汤产业战略研究院院长、阿里云研究院创始人田丰曾经在采访中表示。
在当天的采访中,李飞飞用了一个案例比喻了云原生数据库的本质。以往数据库资源的使用方式像是往家里打一口水井,但今天不需要家家户户打井,而是做一个将自来水厂资源池化的工具,按需按量调度,灵活调度。
“实现高可用弹性可拓展,是促成中国企业,甚至世界范围内企业从传统商业数据库向云原生数据库迁移转型的最本质原因。”李飞飞认为这样的云原生数据库,给上云中的成本问题提供了一个解决方案。
而云计算云原生架构带来的技术先进性,必然会发生的对传统商业数据库发生挑战和替代的过程。阿里云智能总裁张建锋表示,今年不仅会在基础设施上加大投入,同时将大规模引进顶级科技人才,阿里云再招5000人,重点吸引云服务器、网络、芯片、数据库、人工智能等核心技术领域的攻坚人才。
中小企业如何上云
如今,中小企业在大数据、人工智能上的技术革新,带来了商业和经营模式的创新,这反过来也导致了另一批中小企业在物流、中介、信息收集等领域的护城河和赖以生存的优势受到挑战。数字化的转型成为了中小企业们不可回避的话题。
尽管数字化转型碰上新基建的风口,这一潮流一方是巨大的投资,一方连接的是千亿市场机会,但成本和如何上云成为了摆在诸多中小企业面前的难题。尽管一些地方会给企业上云提供补贴,但一些企业主们思考的却是如何拿到上云补贴,而不是如何使业务更好地上云。
中小企业在上云的需求上存在诸多不同。李飞飞的了解中,中小企业上云的前一成本和所需时间和大企业来说更低,时间更短。其次,所需的产业支撑体系也没有大型企业需要的产品支撑体系那么丰富。
另外,中小企业的整个IT支撑系统,是通过软件开发商(ISV)提供的第三方SaaS层解决方案,阿里云需要和这些ISV合作,比如ERP、CRM系统迁移上云,底座换成云原生的数据库,“在这个过程中中小企业可能还没有意识到底座已经用到了云的技术,但实际上已经完成了上云的过程。”阿里云官网代金券2000元礼包领取入口:点击领取
安全与成本
曾经一位帮助中小企业建立数字化转型平台的企业主说,中小企业们在上云时更多还会考虑安全性问题,毕竟要将自己的所有工业数据迁移到公有云上。
李飞飞说,相对于自建云来说,至少在阿里云的实践中,云提供了更加安全的环境和可靠的基础设施。从数据安全及业务可靠上来说,是不存在这方面的顾虑。另外,他表示,一些企业有阶段性分批分步骤实施计划,短期内有一些监管原因需要把数据放在自己的机房或者私有云这样的部署方式。
对于数据安全,田丰还曾提出过“数据信托”的概念,“不管在哪个云上,数据始终是客户的,如果想做更多开发,一定要和客户商谈。现在云计算厂商主要做技术类服务,对数据没有兴趣。如一些公司跟某些保险公司做数据共创和服务,那是业务层的协议,跟底下云技术服务协没关系的,后者挣的是工具类的钱,而不是数据的钱。”
但与此同时,高额的试错成本,也使得中小企业在实质上云的过程中出现阻碍。
张建锋表示,阿里云的300多万企业客户中,大部分是中小企业。阿里云之于中小企业,张建锋比喻,就如同一个新兴淘宝,“原来去做零售,要在线下开一个店,店主要进货要去卖,去做所有不擅长的事情,例如开店租房本质上跟零售没有关系。现在中小企业在云的时代,相当于在公共服务平台。”
但成本和价格,两者如何兼顾?
“实现资源池化资源解耦更好的弹性以后,使用成本价格一定会下降”,李飞飞认为,以前资源是紧耦合的,当存储需要扩展的时候,计算资源必须绑定一起扩展,虽然可能不需要更多的计算资源,反之亦然。但今天,资源解耦弹性以后是按需按量、分钟级的弹性,存储计算分开谈,成本和价格肯定会下降。
李飞飞和团队曾分析过一个典型的OLTP在线交易业务系统和传统的商业数据库,使用云原生数据库的弹性能力,成本整体降到原来的六分之一左右。
数字基础设施已成新趋势:云原生数据库如何解决中小企业上云关键问题
标签:商业软件开发关系现在绑定服务器回避数字化学习
从云计算到云原生:从概念到落地
云计算最近几年已经火得不行, 云原生 (Cloud Native)这个概念又来了,如果上云不“原生”,那就等于白上云。究竟什么是云原生?云原生有何优势?怎么从“不原生”一步一步做到云原生?本文将给出切实可行的云原生落地指南。
我们先从云计算说起 。在云计算普及之前,一个应用想要发布到互联网,就需要企业自己先买几台服务器,找一个IDC机房,租几个机架,把服务器放进去。接下来就是装Linux系统,部署应用。我们就假定用Java写了Web应用,怎么部署上去呢?先配置Tomcat服务器,在把编译好的war包上传到服务器,有用FTP的,安全意识高一点的会选SCP,然后配置Nginx、MySQL这些服务,最后一通调试,把应用跑起来,就算齐活。
这种物理机配合自搭网络环境、自搭Linux、自配环境的方式,有很多缺点,但最主要的问题有这么几个:
解决方案是上云 。上云不能解决所有问题,但部分解决了前两个问题:
但是如果仅仅满足上云,把物理机换成虚拟机,把物理网换成虚拟专用网(VPC),是远远不够的。这些是计算资源和网络资源层面的简化。应用方面,如果延续旧的一套开发、测试、部署流程,做不到快速迭代。
要做到快速迭代,敏捷开发,就需要DevOps,即开发运维由一个团队负责,开发阶段,就要把部署、运维的工作考虑进去,而不是发布一个war包或者jar包后扔给运维不管了。
重开发、轻部署,直接后果就是缺少自动化发布流程。想要把部署规范化,就需要整体考虑一系列问题。
还是以Java应用为例,如果是手动部署,那么就上传war包到服务器,覆盖原有的版本,重启Tomcat,再测试。如果发现有严重问题要回滚怎么办?把老版本再传一遍,然后重启Tomcat。
手动部署,每次部署都是一次生死考验,所以最好不要安排在半夜,以免手抖敲错了命令,本来中断10分钟的服务,变成了灾备恢复,中断3天。
稍微靠谱一点的是写脚本部署,但各家写出来的脚本都有各家特色,不通用,不易维护,所以更好的方式是用成熟的部署方案,比如Ansible,把脚本标准化,比如做成蓝绿发布,把服务器分组,比如A、B两组,先把流量切到B组,升级A组服务器,有问题就回滚,没问题了,再把流量切到A组,升级B组服务器,最后,恢复正常流量,整个部署完成。
但是回滚这个事情,远没有那么简单。做过开发的同学都知道,升级新版本,一般要加配置,改配置,如果回滚到旧版本,忘了把配置改回去,那旧版本可能也不能正常工作。
上云,除了物理变虚拟,简化运维外,最重要的特点——弹性计算,一定要充分利用。
理论指导实践,实践完善理论。如果我们分析大多数基于互联网的应用,可以看到,一个应用,通常用到的资源如下:
上云后,云服务商通常都提供托管的数据库,以及大规模存储系统(S3),可解决存储资源问题。通过云服务商提供的负载均衡(Load Balancer),也无需自行部署Nginx等网关,免去了运维的问题。各种标准的业务组件如Redis、Kafka等,均可直接租用云服务商提供的资源。
我们重点讨论计算资源,也就是云上的虚拟机资源。对于应用来说,可以设计成有状态和无状态两种。一个应用在一台虚拟机内跑着,如果有本地文件的修改,它就是有状态的。有状态的应用既不利于扩展,也不利于部署。反过来,如果一个应用在运行期数据总是存在数据库或者缓存集群,本地文件无任何修改,它就是无状态的。
无状态的应用对应的虚拟机实际上就是不变的计算资源。这里的“不变”非常重要,它是指,一台虚拟机通过一个固定的镜像(预先内置好必要的支持环境,如JRE等)启动后,部署一个应用(对应一个war包或者jar包),该虚拟机状态就不再变化了,直接运行到销毁。
有的同学会问:如果给这台虚拟机重新部署一个新的应用版本,它的状态不就发生了变化?
确实如此。为了确保虚拟机的不变性,一旦启动后部署了某个版本,就不允许再重新部署。这样一来,对虚拟机这种计算资源来说,就具有了不变性。不变性意味着某个虚拟机上的应用版本是确定的,与之打包的配置文件是确定的,不存在今天是版本1,明天变成版本2,后天回滚到版本1的情况。
计算资源不变,能确保启动一台虚拟机,对应发布的应用版本和配置是确定的且不变的,对于运维、排错非常重要。
那么如何在保持计算资源不变的前提下发布新版本?
我们以AWS的CodeDeploy服务为例,假设一组正在运行的某应用v1集群包含3台虚拟机:
现在,我们要把应用从v1升级到v2,绝不能直接把现有的3台虚拟机的应用直接升级,而是由CodeDeploy服务启动3台新的一模一样的虚拟机,只是部署的应用是v2。现在,一共有6台虚拟机,其中3台运行v1版本,另外3台运行v2版本,但此刻负载均衡控制的网络流量仍然导向v1集群,用户感受不到任何变化:
v2集群部署成功后,做一些自动化冒烟测试和内网测试,如果有问题,直接销毁,相当于本次部署失败,但无需回滚。如果没有问题,通过负载均衡把流量从v1集群切到v2,用户可无感知地直接访问v2版本:
稳定一段时间(例如15分钟)后,销毁v1集群。至此,整个升级完成。
上述的蓝绿部署就是CodeDeploy的一种标准部署流程。CodeDeploy也支持灰度发布,适用于更大规模的应用。
把计算资源不可变应用到部署上,实际上是充分利用了弹性计算这个优势,短时间创建和销毁虚拟机,只有上云才能做到,并且针对云计算,把部署流程变得更加简单可靠,每天发几个版本甚至几十、几百个版本都变得可能,DevOps能落地,有点“云原生”的味道了。
说到AWS的CodeDeploy,最早我使用AWS时,对于它的计费采用Reserved Instance预付模型感到很不理解,租用一台虚拟机,按国内阿里云、腾讯云包年包月预付享折扣不是更直观吗?如果仅仅把上云变成租用虚拟机,那就完全丧失了弹性计算的优势,相当于租用了一台虚拟机在里面自己折腾。AWS的Reserved Instance计费并不绑定某一台虚拟机,而是一种规格的虚拟机。
我们还是举例说明,如果我们有1台2v4G规格的虚拟机,并购买了1年的Reserved Instance,那么,我随时可以销毁这台虚拟机,并重新创建一台同样规格的新的虚拟机,Reserved Instance计费会自动匹配到新的虚拟机上,这样才能实现计算资源不变,频繁实施蓝绿部署,真正把部署变成一种云服务。最近阿里云终于推出了节省计划的付费模式,有点真正的云计算的付费味道了,但是腾讯云、华为云还停留在包年包月和按量付费这两种原始租赁模型。
讲了这么多自动化部署,实际上一个指导思想就是如何充分利用云的弹性计算资源。从充分利用云的弹性资源为出发点,设计一整套开发、部署、测试的流程,就是云原生。弹性资源利用得越充分,云原生的“浓度”就越高,就越容易实施小步快跑的快速迭代。
那么虚拟机是不是弹性最好的计算资源呢?从应用的角度看,显然容器是一种比虚拟机更具弹性,更加抽象,也更容易部署的计算资源。
容器和虚拟机相比,它实际上是一种资源隔离的进程,运行在容器中的应用比独占一个虚拟机消耗的资源更少,启动速度更快。此外,容器的镜像包含了完整的运行时环境,部署的时候,无需考虑任何额外的组件,比其他任何部署方式都简单。使用容器,开发部署流程就变成了开发,生成镜像,推送至Docker Hub或云服务商提供的Registry,直接启动容器,整个过程大大简化。
使用容器比使用CodeDeploy部署还要更加简单,因为CodeDeploy需要在虚拟机镜像中预置Agent,由于没有统一的发布标准,还需要配置CodeDeploy,告诉它去哪拉取最新版本,这又涉及到一系列权限配置。而容器作为标准的部署方案,连发布系统都以Registry对各个镜像版本进行了有效管理,所以部署非常简单。
容器作为一种弹性计算资源,也应遵循计算不变性,即不要给容器挂载可变的存储卷。一组不变的容器集群才能更容易地升级。容器的运行方式本身就遵循了不变性原则,因为通过一个镜像启动一个容器,在运行过程中,是不可能换一个镜像的。容器本身也强烈不建议应用写入数据到文件系统,因为重启后这些修改将全部丢失。
容器的启动和销毁非常容易,不过,容器的管理却并不简单。容器的管理涉及到创建、调度、弹性扩容、负载均衡、故障检测等等,Kubernetes作为事实上的容器编排标准平台,已经成为各个云服务商的标配。
如果要直接使用K8s,在云环境中首先要有一组虚拟机资源作为底层资源,然后搭建K8s环境,定义好容器编排并启动容器。云服务商几乎都提供托管的K8s服务,但直接管理K8s仍然需要非常熟悉K8s的工程师。
还有一种更简单的使用容器的方式,即完全将底层虚拟机和K8s托管给云服务商,企业客户只需关心如何部署容器,底层的K8s和虚拟机对企业不可见或者无需关心。AWS的Elastic Container和阿里云的弹性容器均为此类服务。对于中小规模的应用来说,计算资源直接使用容器,再配合云服务商提供的负载均衡,托管的数据库、消息系统、日志系统等组件服务,应该是目前最“云原生”的一种方案。
最后,我们总结一下云原生的特点:
所谓云原生,就是在上云的过程中,充分发挥云平台的弹性计算、弹性存储的优势,尽量把应用设计成适合云计算的架构,把部署设计成简单易用的流程,这样才能实现业务快速上线,快速迭代。
云原生是一个大方向,在上云的过程中,逐步改造应用架构和部署流程,从手动往自动转,逐步增加计算资源的弹性,就能把云原生一步步落地。