当前位置: 主页 > 建站知识 > 软件开发

应用软件技术架构-雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解

发布时间:2023-05-26 11:06   浏览次数:次   作者:佚名

在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要在每个服务中单独实现,这使得系统维护者没有一个全局的视图来统一管理这些功能。API 网关致力于解决的问题,便是为微服务完成这些通用的功能,在此基础上提高系统的可扩展性。

SpringCloud 玩家肯定都听说过 Zuul 这个路由组件,包括 Zuul2 和 Springcloud Gateway 等框架,在国内的知名度都不低。而 Kong的强大功能,则更衬的上产品这个词(此处不再展开)。

(3)DOCKER 镜像发布;

建立运行环境,使用Docker建立镜像,提交到石化智云直接发布Docker镜像;

四、云时代的开发语言与生态

除了Python+Flask技术栈,其实还有很多更为流行的云端技术架构。

1、SpringBoot&SpringCloud(Java)软件架构

SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

SpringBoot适合大型企业级应用体系构建,具备服务于容器管理、负载均衡等并行化及复杂管理功能。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

这一架构以Java语言作为开发语言。

业务架构和应用架构的区别_雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解_应用软件技术架构

2、NetCore&DotNet(C#)架构

.NET Core是适用于 windows、linux 和 macos 操作系统的免费、开源托管的计算机软件框架,是微软开发的第一个官方版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework),未来也将会支持 FreeBSD 与 Alpine 平台,也是微软在一开始发展时就开源的软件平台。

由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 打包式安装的作法截然不同,同时各包亦有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。

.NET Core 是由许多项目所组成,除了基本的类库(Core FX) 之外,也包含采用 RyuJIT 编译的运行平台 Core CLR、编译器平台.NET Compiler Platform、采用 AOT 编译技术运行最优化的包 Core RT (.NET Core Runtime),以及跨平台的 MSIL 编译器 LLILC (LLVM-based MSIL Compiler) 等项目。同时,微软也发展了一个建置技术文件的平台docfx,并运用于 .NET Core 的文件网站。

Netcore建议的开发语言是 C#。

3、Node.js(javascript):架构

Node.js 是一个基于 Google的 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。

Node是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。此外在基于Web浏览器端的绝对统治地位(可能是目前唯一的可直接运行的前端语言!--sirius),使得Node发展迅猛,成为事实上的平台。

4、 Django&Flask(Python)架构

目前Python作为世界排名第一的开发语言,主要领域还是在数据分析、计算与人工智能领域。目前,如何将python实现服务端以服务进行统一发布和管理,已经产生了大量的web框架解决方案。典型而优秀的案例是Django和Flask。

雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解_应用软件技术架构_业务架构和应用架构的区别

Django:

Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

层 次

职 责

模型(Model),即数据存取层

处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

模板(Template),即表现层

处理与表现相关的决定:如何在页面或其他类型文档中进行显示。

视图(View),即业务逻辑层

存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

业务架构和应用架构的区别_雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解_应用软件技术架构

Django 视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django 模板 仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。

应用软件技术架构_业务架构和应用架构的区别_雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解

技术栈很难分出好或者不好,只有合适或者不合适。

Springboot生态是Java语言的云平台开发生态。这一技术生态是从很多技术整合形成,其技术体系全面庞大而成熟,具有最为广泛的开发社区和资源支持;在开发和部署上也具有全面的开发框架和管理中间件支撑,非常适合大型企业级应用体系构建。

.Netcore是微软的云平台技术生态。这一生态技术体系全面且强大、具有微软技术支持,其开发框架在微软的持续完善下逐渐成熟且丰富的资源支持,目前到了3.X版本,其相关的商业化的配套技术和中间件支撑也很丰富,非常适合大型企业级应用体系构建(尤其熟悉和依赖C#语言的)。

Node.js是javascrip语言的技术生态,它是基于“JavaScript无处不在”的理念,由GoogleV8引擎支持的技术栈,目前具有与广泛的技术社区支持,编码上手快,技术体系支撑全面,非常适合分布式设备的数据密集型实时应用(对于不想多学一门语言的话,首选)。

Django和Flask是Python语言的技术栈。拿Django来说,Dj的功能完善齐全,自带各类工具和框架,它有先进的可插拔APP设计理念,作为替代,还有Flask这样的轻量级可扩展的小型方案;最关键的,是其与Python语言的无缝衔接。适合写算法的人们用来快速构建自己的web应用。

五、不同技术栈的集成整合

近年来,随着国内外油气公司数字化转型的推进,企业应用建设中的新旧系统如何基于新的架构集成、整合是面临的技术问题之一。

一般来说,企业在构建应用技术架构的时候,大量历史应用系统可能使用不同的framework来完成的,这已经不仅是软件模块之间的集成,而是不同技术生态之间相衔接的的问题了。再者,大数据分析与人工智能技术的兴起,也使的很多传统的web软件架构面临着技术升级,此时,面对各种复杂和不兼容的软件技术整合问题,选择一个合理的技术集成架构是目前多数信息中心关注的焦点问题。

还有就是云架构的普及,自2019年来大型的数字化转型和数据与人工智能中心的建设中,基于云平台的软件集成已经逐渐成为共识,选择合理的软件生态和创建合理的软件集成架构是其中最为基础的工作。微服务与容器技术目前已经成为面对这种复杂软件集成的解决方案。

业务架构和应用架构的区别_雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解_应用软件技术架构

1、微服务架构

Thoughtworks的Martin.Folwer对于微服务是这样定义的:“简而言之,微服务体系结构风格是一种将单个应用程序作为一组小服务来开发的方法,每个小服务都在自己的进程中运行应用软件技术架构,并与轻量级机制(通常是HTTP的API)进行通信”。此外,MartinFolwer指出,这些服务具有如下特点:”这些服务围绕业务功能构建的应用软件技术架构,可以通过完全自动化的部署机制独立部署。这些服务的集中管理很少,可能使用不同的编程语言编写并使用不同的数据存储技术”。

简单点说,微服务就是我们原来的的大型软件拆解为多个的小型服务,让每个服务都可以用不同的开发技术独立开发,在自己的进程中独立运行,通过相互间的轻量级通信实现整体功能的整合。目前主流Web开发一般会采用微服务架构。我们不再如过去那样去开发一个巨大的单体应用,而是将应用分解为小的、互相连接的微服务,每个业务逻辑都被分解为一个微服务,微服务之间通过REST API通信。微服务架构会提供一个APIGateway(应用网关来传递请求,她负责服务路由、负载均衡、缓存、访问控制和鉴权等任务(如Kong)。

所以我们看到,微服务和传统的Restful服务开发和WEB开发模式其实并无很大的区别,其最大的特色还是在软件模块的划分和部署方式上提供解决方案,从而让大型软件的开发部署和运维变得更加简单。

微服务的应用和普及的一个重要原因,是因为强大的开源项目支撑。由于大量的开源项目,使得不同语言和开发体系在构建微服务的过程中,都可以找到配套的清晰且的、典型的开源微服务架构,也具有丰富的中间件支撑,这使得微服务的开发门槛极大的降低。

2、Docker与容器技术

正式说,容器是一种轻量级的、可移植的软件打包技术。容器技术通过有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,使应用程序可以在操作系统和运行环境中以相同的方式运行。

通俗说,容器技术是用来打包应用及运行环境,实现无差异部署和独立运行的一种技术。

Docker 是一个开源应用容器,让开发者可以打包他们的应用和依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,实现虚拟化。

Docker 作为容器工具可以把:业务逻辑容器、数据库容器、储存容器、队列容器使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来,让彼此通信,从而形成微服务。因此微服务很适合用 Docker 容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。

过去在软件开发完成后的配置和部署是一个巨大的工作量。现在,使用Docker技术,可以将应用程序,包括软件代码、运行环境、依赖的包、配置文件和等等其他资源,封装在一个容器中,实现快速部署。不仅如此,这些容器之间是进程隔离的,在容器中的操作运行不会影响其他容器。

业务架构和应用架构的区别_应用软件技术架构_雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解

3、应用整合的技术架构

基于云平台的服务整合技术,建立不同技术生态系统所产生应用服务成果的集成机制。在部署上,基于云服务的云架构,形成平台功能和应用功能的松耦合集成机制。

雷葆华云计算解码:技术架构和产业运营^^^cdn技术详解_应用软件技术架构_业务架构和应用架构的区别

图:云平台的多技术栈的整合示意

上图仅为示意图,从技术角度来说问题很多。大致表达了这样一个含义:不同的云平台编码研发的技术栈很多,相互之间也无法实现底层API调用(有的能,但需要封装或者解释),一般来说,不同技术栈都是用来开发不同类型的应用,这些不同的应用各自部署,相互之间通过jason以Rest服务通讯。

因此,一个整体的大型应用可以不关注开发语言,无论哪种开发语言和技术生态,开发的前后端打包后,以一个独立的微服务发布,微服务之间实现了解耦,可以独立的进程化部署,应该不受什么影响,这种模式下,更加关注的是多系统如何整合(不好用或者过时了可能要直接废掉),而不是软件功能和服务的积累沉淀。

六、小结

数据服务解决数据共享接口。

智能建模实现数据处理与模型训练,基于模型发布预测服务。

智能应用通过调用数据服务和预测服务,提供用户交互的图形化功能模块。

数据服务、智能建模、智能应用,实现模块化封装,并云端部署发布。

(完)