云计算时代的技术架构与开发模式
DOS时代、Windows时代、Web时代、移动App时代,我们的开发语言、技术架构、调试方法、部署模式、运维模式,都发生着非常大的变化。那么我们来重新想象,云计算时代的技术架构和开发模式应该是什么样子?
一、从一个普通程序说起
我们常规写程序一般都是这样的构成:
1、微软世界:ASP.NET、VB.NET/C#、SQLSERVER
2、JAVA世界:JSP/Servlet、Struts/Spring/Mybatis、Oracle/MySQL
3、PHP世界:类ThinkPHP这样的框架、MySQL
往往我们在Web前端还要加点东西,如AngularJS、BootStrap,让前端代码显得更有结构,更多终端设备适配。
要运行这些程序,我们通常在前端需要点Apache/Nginx,中间还需要点Tomcat/JBOSS/WebSphere/WebLogic之类的东西,底层还需要.NET运行环境/JAVA运行环境/PHP运行环境
OK,可以部署了。
过去不少云计算厂商搞AE(Application Engine)环境,期望开发商把应用软件一部署就OK。但是发现应用开发者在运行环境的组合方面挺多、版本要求也挺多,这事吃力不讨好,于是只提供纯粹的虚机环境了,对于各种组件组合和版本组合,由第三方的AE环境包研发商来提供了,大家可以在软件服务市场中购买到,而且很方便一键安装部署,对于没有什么特殊性能要求和分散部署要求的初创企业,一般就足够了。
二、说说云计算IaaS产品线能提供的支撑
作为云计算,我们先特指一下IaaS,大致是这些产品线:
1、云主机:虚拟机、Docker容器。
虚拟机大家都理解,打开了和一台裸机从感官上没差别。但是Docker需要应用Image镜像放到Docker容器中才能运行,这是很多人没有概念的。但是Docker容器更轻便,所以启动迅速、挂起迅速、占有资源少。不像虚拟机,还得安装操作系统和配置操作系统。
当然,除了虚拟机和Docker容器,云计算厂商还提供物理服务器,供更高性能要求使用。
2、云网络:CDN、SLB。
CDN可以让静态文件缓冲,可以分发到全国,离用户访问的节点最近,这样访问速度最快。
SLB是网络负载均衡,可以让你的应用从入口一进来就分流到各个主机上,分担了计算压力。
云网络还有:VPN(虚拟专用网络)便于企业组内部广域网,高速传输通道可以用来传输大批量数据,专用网络用于高性能高安全的大客户使用
3、云存储:文件存储、对象存储、块存储。
这三者都能存各种文件(文档/图片/视频/音频),但是文件存储是可以建立文件目录结构的;对象存储是扁平的,它有KV索引,只需要关注某个文件放在哪个存储阵列里的那个磁盘上即可,你如果不需要建立文件目录结构,可以用对象存储;如果你对存储稳定性要求高,你可以用块存储,这就是咱们通常说的RAID存储,块存储会在底层保证数据的自动冗余复制多份,不需要应用者Care,所以某块物理磁盘出了问题,数据也不会丢失。你可以根据自己的需求来选择不同的云存储产品
4、云数据库:关系型数据库、分布式关系型数据库、NoSQL。
关系型数据库,常见的有:SQLSERVER、ORACLE、MySQL、PostgreSQL。
现在还有一些关系数据库的中间件,可以做Sharding的自动分库分表,不需要应用开发者Care,如MyCAT。但这不是真正的分布式关系数据库。真正的分布式关系数据库,从底层架构设计时就是原生的分布式。
分布式关系数据库,如Greenplum、TiDB(国人作品/京东老员工创业),阿里也出了一个Oceanbase。
NoSQL,有KV型内存式的Redis、memcache,也有文档式的mongoDB。
云数据库服务商会在后端提供可编排、自动化、自主化的数据库备份服务、迁移服务,让数据存取更稳定保障。
可以这么说,IaaS给你提供了服务器、存储、网络、数据库,你可以把自己的程序放上去。
三、说说可扩展的技术架构
其实这个世界有很通用的可扩展技术架构方法,但中国中庸万金油的狗屎开发人太多,把所有子系统的代码都写在一起分不开,前后台代码都混在一起,代码和数据库混在一起分不开,导致想分散存取压力和计算压力都不能,只能不断加内存、升级CPU、升级网络带宽、升级存储设备性能。
一般的可扩展技术架构方法是这样的:
1、各个子系统模块代码分离,而且可以独立部署。
2、需要开发一个企业门户,作为各个独立部署的子系统进行集成接入,也便于负载均衡分流路由
3、各个子系统之间通过明确的统一规范的服务API接口进行连接,而且由SOA中间件在中间协调,而非交叉直连
4、各个子系统要共同访问的数据,定义成主数据。有专门的数据库放置主数据,有专门的管理系统UI操作可以管理主数据,有专门的后台服务引擎来进行主数据的更新、日志、复制、分发推送,有专门的API服务用于其他程序通过接口来存取主数据
5、统计报表和业务子系统分离,业务子系统的数据通过引擎复制导入到数据仓库,统计报表在数据仓库中做。这样统计报表可以满足更复杂需求、定制更灵活,而且运行时不影响业务子系统的正常处理。
有这五条基本架构原则,好多企业应用就已经安顿住了。其他加加索引、优化一下SQL、归档一下历史数据,都是雕虫小技了。
当然,你如果有更高的性能要求,云网络能帮助到你:SLB可以进行分流,你可以把一套子系统部署多套,部署到不同的服务器上,子系统代码运行,消耗最多的是CPU,而不怎么消耗内存、带宽、存储。当然,那你如果一个子系统部署多套的话,就出现了另外一个需求,你需要自动化的DevOps工具,来进行自动化的一次发布、多机多套部署,这样可以保证多台服务器上的代码逻辑是一致的。
你还需要做动静分离。静态的,Apache/Ngnix、浏览器都会帮你做很多缓存,可以不用次次重新到服务器上取信息。而且云网络的CDN也可以帮到你,帮你把静态文件分发到全国各个节点,让用户就近访问。这样你就可以获得更高的性能了。
如果你还需要更高的性能,云数据库可以帮助到你。不过你还得需要改你的代码架构。你需要应用Redis,把数据先打到内存中,程序会自动优先访问内存中的数据,而不用到磁盘中取数据。根据业务场景需要定时来更新内存中的数据。
如果你还需要更高的性能,你还可使用分布式数据库。
如果你还需要更更高的性能,你需要针对你的数据类型和特点选择不同的数据存储形式、不同的数据引擎了。所以各种各样的NOSQL就产生了,有的很善于处理时序型数据,有的很善于处理图状网状型数据,这样不管你是订单顺序,还是社交网络,都有合适的数据存储引擎,这样存取数据会更快。
四、说说集成
刚才提到可扩展的技术架构时没有提集成,因为咱们要专门提提。
集成有这么几个层次:
1、UI层:企业统一门户,单点登录
2、UI层:URL调用。通过传入正确的Session和URL参数,以HTTP GET或POST方式进行访问,直接调用出其他子系统所属的UI窗口。当然这种调用是糟糕设计,而且各子系统独立部署还会产生XSS跨域访问问题。这样就把各子系统之间的调用都倒逼到逻辑服务层了。
3、逻辑层:通过WebService、REST等方式暴露接口,进行接口调用
4、逻辑层:很多烂程序,在逻辑层直接写很多SELECT、INSERT、UPDATE、DELETE的SQL语句,而且是跨各个子系统的。这是糟糕设计。所以一开始在代码开发的时候,就应该各个子系统是不同的代码库、不同的数据库,这样从一开始就不会产生跨子系统SQL调用
5、数据层:有不少烂程序,N个子系统的数据表都放在一个数据库中,而且还写了不少VIEW、存储过程,甚至Trigger,这都是程序啊,程序都散在了各个层,而且都是跨子系统的,简直电线缠绕啊。所以我个人很倾向把各种代码都集中在逻辑层,把数据库就做成数据存取即可,不要给它赋予太多职责
6、任务层:还有不少烂程序,有些后台需要根据条件触发或者定时调度执行的后台任务,这里面也写了大量代码。建议啊,逻辑代码也是放在逻辑层,而这个任务层代码只是进行调度组合即可,不要把详细的逻辑代码都写在这里。
7、数据层:主数据集成。主数据如何被多个子系统更新、如何公开成服务被子系统调用、如何进行数据同步复制与分发
8、数据层:统计分析集成。这需要做成独立的数据仓库来干
可见集成,跨层纵向调用,水平横向之间调用,产生了多少交交叉叉,因而引发了多少牵一发动全身的事情。本来简单的事,就被万金油们搞成浆糊了。为了清晰的集成,我们有必要把调用都集中在逻辑层,而不是散在各处。
为了清晰的集成,我们还有必要引入中间件。
1、过去搞的是SOA中间件,解决接口之间的调用,不要让接口互相直接调用产生蜘蛛网,而是形成交通岗中枢进行中间指挥,在中间进行服务注册、发现、路由、安全验证、多协议传输。
但互联网是网状的、分布式的、无中心的、不能单点失效的,所以SOA中间件的玩法就在云时代的互联网架构基础上玩不转了。要去中心化。
近年火热的微服务架构和微服务中间件,和SOA有些不同。微服务架构讲究的是服务粒度更碎,服务能力更单一,形成Open API的形式,未来开发程序,都是基于在云上开放的Open API来直接组合,就形成了一个场景式的功能,AWS的lambda就是这个思路的尝试。在移动时代,不讲究上千个功能点的大集成的ERP套件,而更讲究一个APP满足一个核心场景,一个APP也就十来个功能。当然,你做的功能多了,移动屏幕就那么大,还是多点触摸式不好输入,移动APP就没法用了。
至于Google的Protocol Buff和Facebook Thrift,只是为了让多语言之间进行顺畅的Service-client服务调用与数据传输,在小范围来看也属于服务中间件。
2、有了单点登录、主数据Open API服务,那各个程序间的调用、数据、消息还是需要的啊。在云计算互联网时代应该怎么办呢?
Kafka、Zookeeper上场。分布式的Kafka,通过消息队列管道,把数据、触发消息通知传送到Service-client两端。ZooKeeper来作为外协服务协调各个服务之间的调度。
有了微服务架构、微服务中间件、Kafka、Zookeeper,过去集中式中枢式的SOA中间件就被瓦解了,被现在的分布式无中心式架构所代替,真正又回到了互联网的网状结构。
五、总结一下云计算时代的技术架构模式和代码开发模式
1、H5前端技术,适合各个设备
2、微服务技术架构,一个功能点可能就是一个服务,对外公布Open API,供其他应用调用。微服务技术架构让代码不再混合,代码规模小,容易理解容易修改,新人容易上手
3、微服务部署在Docker容器中,Docker隔离了各种基础支撑组件的部署相互影响的复杂性,这个微服务用到哪些支撑组件哪些版本就部署哪些,和其他微服务用的组件以及版本不打架,这让服务运维稳定性提高了许多
4、云计算提供了专门的对象存储、块存储、CDN、SLB负载均衡、虚拟专用网络;云计算提供了各类云数据库,如MySQL、Redis、MongoDB、PostgreSQL等等;云计算提供了各类分布式中间件,如kafka消息队列、nutch爬虫、elasticsearch搜索;云计算厂商还提供了这些基础软件的运维,如备份、迁移、扩展、补丁升级等等。微服务只需要写好应用逻辑代码,其他需要的文件存取、数据存取、数据传输,都直接调用云计算提供的API就可以得到满足
5、各种微服务都对外提供标准规范的Open API,这样的微服务越来越多,我们写一个应用,很多时候就是把各种Open API连在一起就可以构建成一个应用了
6、我们的代码是托管在专有的云Github上,有专门的版本控制管理工具,有专门的研发工程效率工具,如自动化编译工具、自动化测试工具、多节点自动化统一部署工具、灰度发布工具、项目计划和任务管理工具、文档管理/需求管理/BUG管理工具,这些也都部署在基础的云IaaS中。
六、最后谈谈云计算IaaS的选型
对于创业小公司,一般这样选型云计算:
1、域名便利:方便域名注册、域名绑定、域名备案
2、支付便利:如支付宝、微信支付,扫码付款即可
3、价格低廉:如一个月100多元,一年才1000多元
4、有AE包:可以网上选择、网上付款,甚至0元促销,直接一键安装。很容易就把自己的程序部署上去
5、提供基础应用:如免费的企业邮箱。如果有免费的wordpress和企业模板,不用安装,直接开通,直接域名绑定,企业的官网就有了。一个企业的架子就很快搭起来了,从外面看来很像一家正规公司了
对于中公司选型云IaaS:
1、各种引擎很重要。中公司,自己的应用做的很好,但是大部分研发力量主要都投入到应用研发上了,他们没有能力来研发以及运维大规模的基础引擎,所以如果云计算厂商能提供好多底层的引擎,他们就会直接使用。如搜索推荐引擎、人工智能引擎、大规模日志引擎、大数据技术平台。又不用自己研发,又有现成的高科技给自己主力,多好
2、价格。又想吃好肉又想价格低,所以只能随业务增长量来收费,这样容易接受。但是因为所有业务应用都受基础引擎支撑,所以想迁走就基本不可能了,只能细水长流
3、有比较保障的云安全:至少不能动不动就被DDoS攻击、被安装了肉鸡木马、被感染了病毒。中公司的研发人都主要偏向于应用研发,一般没有专门的安全技术力量。
对于大公司选型云IaaS:
1、稳定很重要。如网络稳定、存储稳定、内存CPU主板稳定、电力稳定。这是需要云计算厂商投大钱的,钱没投上,只选择低端货,那自然不稳定,性能也不高
2、解决方案很重要。大公司一般应用复杂,要求异地多备份、多地多活、流量分流、快速切换,这需要云计算有很强大的技术解决方案能力。甚至有些大公司为海外提供服务,所以也非常看重云计算厂商在世界各地如香港、日本、东南亚、欧洲、美国的云计算资源能力
3、技术支持很重要。出了问题,可以快速响应,快速查找到问题根源,快速修复或快速升级。这对云计算厂商的技术团队的规模、技术能力、自动化工具、跨部门之间的良好协作,要求很高。
4、技术服务团队的服务态度也很重要。本来客户出了问题已经很着急,如果技术服务团队的态度散漫、态度不和蔼,甚至欺骗客户、拖延时间、内部协调不了,那客户就爆了。
相关推荐
大数据时代云计算架构技术与实践发布学习教案是当前热门的技术方向之一,对于信息技术和计算机科学专业的学生和从业者来说具有重要的实践价值。本教案旨在帮助学生和从业者了解云计算架构技术的基本概念、原理和应用...
综上所述,在云计算时代背景下,IT人才培养模式需要与市场需求紧密对接,不仅要求IT人才掌握云计算相关的专业技术,还需具备解决实际问题的职业素养和创新意识。通过持续的教育改革和实践,可以有效提高技术技能型IT...
### 云计算体系架构与关键技术 #### 一、引言 随着信息技术的发展,云计算作为一种新兴的服务模式,正在逐步改变人们的生活方式和企业的业务运作模式。云计算不仅提供了强大的计算能力和服务,还能够灵活地根据...
### 云计算软件架构详解 #### 一、云计算的变革力量 云计算,作为一种革新性的计算模型,...随着云计算技术的不断成熟和应用场景的日益丰富,它将继续引领数字时代的新潮流,为企业和社会带来前所未有的机遇和挑战。
- 从早期的硬件紧密耦合(1955-1980年)到软硬件解耦(1980-2010年),再到如今的大数据和云计算时代,IT行业经历了从大型机到个人电脑和服务器的转变。 - 在这一过程中,操作系统、数据库、中间件和硬件供应商如...
本文以云计算时代IT系统建设模式为主题,探讨了这一技术对于企业信息系统建设模式的影响,并分析了云计算技术的概念、特点以及在建设与运维成本角度的相关问题。 首先,云计算作为一种按需使用、按量付费的服务模式...
然而,随着技术的发展,软件开发人员也需要不断学习新的技术和工具,以适应云计算时代的要求。对于我国的软件开发行业来说,加强对核心技术的研究、优化人才结构、提高知识产权保护意识和投资,是适应这一变革的关键...
总的来说,云计算时代的软件开发技术正经历深刻的变革,从传统的瀑布模型向敏捷、DevOps和持续集成/持续部署(CI/CD)转变,同时引入了如模型驱动体系架构(MDA)等先进的开发理念和工具,以适应快速变化的业务需求...
随着云计算技术的普及和应用,信息资源的开发利用模式正在经历深刻的变革。基于云计算的信息资源开发利用模式主要包括以下几点: 1. 信息资源的采集方式:传统的信息资源采集方式通常依赖于固定的设备和程序,而...
云计算时代为企业人力资源管理带来了新的挑战与机遇,企业必须进行适应性变革以应对这些变化。本文分析了企业传统人力资源管理模式,并与基于云计算的人力资源管理体系进行了比较,探讨了云计算如何改变人力资源管理...
总结,云计算大数据架构模式与实践是现代企业数字化转型的关键。通过理解并合理运用这些模式,企业可以构建高效、安全的数据驱动型基础设施,从而在竞争激烈的市场中获得优势。同时,随着技术的不断发展,企业应持续...
在云计算实践中,云计算技术架构与实践指南,如李天目和韩进所著的《云计算技术架构与实践》,为云计算系统的规划、部署、运营和维护提供了宝贵的经验和建议。这些实践经验对于云计算系统架构的设计和优化提供了重要...
陈齐彦指出,在互联网+时代,传统的企业软件开发模式面临挑战,无法跟上快速变化的用户需求和市场动态。在容器技术出现之前,软件开发受到诸多问题的困扰,如团队协作不足、运维难以追踪、质量难以保证、集成不顺畅...
最后,课件可能还会讨论云计算的未来趋势,比如边缘计算、多云策略、无服务器架构等新兴技术,以及云计算如何推动数字化转型和社会经济的发展。 总结来说,“云计算基础技术与应用”的PPT课件将全面涵盖云计算的...
随着大数据时代的到来,物联网与云计算技术逐渐成为推动物流行业变革的重要力量。物联网技术通过利用RFID(无线射频识别)、GPS(全球定位系统)、二维码和激光扫描等技术手段,实现物品信息的实时交换与传递,为...
陈齐彦认为,在互联网+的时代,企业软件发展到今天,已经到了一个临界点,也就是我们的“瀑布式”的软件开发模式存在着一定的瓶颈,已经无法满足企业快速响应用户需求和市场需求的特点。他表示,在容器出现之前,...
在当前数字化转型的时代,云计算已经成为了推动业务创新和效率提升的关键技术之一。本文将深入探讨“云计算:应用开发实践”,旨在为对云计算有兴趣并希望在实际工作中应用的读者提供宝贵的指导。无论是初级开发者,...
随着我国经济的持续发展,数据...同时,企业和研究机构还应继续研究和开发更加先进、更加节能的数据中心技术,以应对未来数据量和处理需求的增长,从而为大数据云计算时代的企业数据中心节能技术提供更多的解决方案。
云计算作为一种新时代的IT计算模式,其核心在于通过分布式计算和存储架构为用户提供计算资源,这一概念的提出彻底改变了人们对于数据处理和存储的理解。随着技术的不断发展,云计算已经成为众多企业和个人用户选择的...