现代APaaS是由哪些技术栈构成的?

分享 零代码明道云  收藏
0 / 614

未命名.003.jpeg
文/明道云 CTO 金可伟

从 PC 时代到移动互联网时代,软件技术架构得到了充分的发展,尤其是互联网企业助推了一大波的技术拓展与变革,因为他们所面临的用户量、交易量、数据量并非传统架构可以解决,比如早年的阿里去 IOE 化,现在的数据中台战略等就可一窥究竟。随着业务的深入,他们对技术栈以及软件架构提出了更多的诉求,软件技术领域蓬勃发展,随之产生了非常多的现代软件架构理论与开源项目。

现代软件架构领域的变革之路,主要包括单体应用、SOA、微服务以及云原生应用

  • 单体应用

软件发展早期通常都是单体应用,将前端界面、业务逻辑、数据存储逻辑等都放在一个 war 包或者一个工程里面,没有专业的技术分工,大家共用一个工程,要求开发人员具备前后端的能力。对于轻量级的应用采用这种架构无可厚非,测试与部署便捷,比如现在主流的 Wordpress、Drupal,但对于现代互联网应用,比如 APaaS 这类复杂应用来说就显得力不从心了。单体应用耦合度太高,前后端混用,强部署依赖性(改个文案还要连带后端一起部署),根本无法满足现代互联网应用在迭代速度、系统扩展性、资源利用率优化上的要求。

  • SOA(面向服务的架构)

由于单体应用无法满足现代复杂应用,对单体应用的拆分便应运而生,通常来说根据业务模块的诉求进行拆分,不同的业务通过消息总线进行通信与集成。虽然 SOA 架构对服务做了拆分,但 SOA 的组件一般比较大型,发布版本一般更加复杂,统一通过消息总线管道来处理不同业务之间的逻辑,导致消息总线也变得异常复杂,且不同业务之间严重依赖消息总线。

  • 微服务

微服务架构和 SOA 架构非常类似,但微服务架构更强调“业务模块彻底的组件化、服务化以及去中心化“的原则,它去除了消息总线中心化的机制,各个服务之间在需要的情况下可相互调用,通常以 Http Rest API 或者 RPC 方式进行通信。服务自治是微服务架构最大的特点,每个服务可由独立的团队来负责开发,可独立部署扩展而不影响其它服务,也可采用不用的技术栈来实现业务。现代互联网产品特别是平台类产品是异常复杂的,通常采用微服务架构以及混合型语言进行开发迭代,由擅长不同领域的工程师各司其职。

  • 云原生应用

随着云计算的普及,过去昂贵的 IT 资源变得像水电一样,我们仅仅只需要数分钟乃至数秒钟时间即可获得一台云主机,相比传统的服务器数据中心上架那可是指数级的效率提升。云时代需要需要新的技术架构,来帮助企业更好地利用云计算优势,充分释放云计算红利,帮助现代软件快速,持续,可靠,规模化地交付。云原生应用正是如此,一旦开发完成便可部署到任意公有云、私有云乃至跨云数据中心上,可便捷地跑在容器服务、Kubernetes 服务、云主机上亦或无服务计算环境上。云原生应用以微服务作为基础要求,采用 DevOps 和容器为代表的基础架构组成。

现代 APaaS 是一个复杂的应用门类,一个完整的 APaaS 应用应当包含复杂健壮的数据模型、基于角色的管理权限体系、丰富的前端视图布局与自定义界面能力、稳定且可扩展的自动化流程引擎、强大的报表可视化以及分析能力、插件化扩展集成能力和充分的开放体系。

为了支撑以上能力,APaaS 应用通常会使用微服务的架构模式,并且迎合云计算更多地实践云原生理念,使用云原生生态工具,同时 APaaS 会大量采用开源软件框架,并组合使用多种技术栈。

  • 主流的技术框架

采用主流的技术框架体系,如 SpringBoot、Dubble、.Netcore 跨平台方案、NodeJS Express、LAMP,前端主流三大框架 Angular、React、Vue,RPC 框架如 gPRC、Thrift 等。这些框架往往具备完整的文档,丰富的应用场景,活跃的社区生态,来满足软件快速高效迭代的工程诉求。

  • 自动化流程引擎

APaaS 应用通常会包含业务流程自动化的特性,这部分业界也有比较成熟的 BPM 开源方案,如 Activiti,JFlow 等,但以上技术框架往往比较复杂与臃肿,因此也有不少厂商会采用自研的方案。明道云的工作流就是完全自研的引擎,并通过消息队列引擎来进行拓展,如 Kafka、RabbitMQ、Redis 等。

  • 消息队列

消息队列在现代软件中使用非常广泛,它可以覆盖到非常多的场景,典型的比如业务的异步处理、消息通知、自动化流程、日志处理、用户活动跟踪、运营指标、流式处理等。目前现代软件使用最多的是 Kafka、RabbitMQ、RocketMQ 与轻量级的 Redis 队列,合理的使用消息队列,不仅仅可以提高系统吞吐量,也可以有效降低系统耦合度减小复杂度,消息队列目前被广泛的运用在 APaaS 应用中。

  • NoSQL

相较传统软件,现代 APaaS 通过 SaaS 模式向大量用户提供公共服务,动辄数万乃至数十万的流量是非常普遍的。因此,系统吞吐量从系统一开始设计的时候就被列为重要指标,一个健壮的 APaaS 服务应当是可以随时弹性扩展的。在这个约束下,传统的 RDS 难以为继,系统往往会引入 NoSQL 的缓存以及存储设计方案,提升系统性能,比如使用基于 Key-Value 的缓存体系如 Redis、Memory,使用文档型数据库做数据存储如 MongoDB,甚至使用列式数据存储来做数据存储如 Cassandra、HBase 等,这类 NoSQL 方案往往天生具备了集群部署、分布式存储的特征,大大简化了在系统架构设计上所面临的问题。

  • 分布式存储

现代 APaaS 应用也面临着存储上限的问题,这里包括了结构化及非结构化的数据存储,这个问题主要是由于物理设备的容量引起的。为了规避以上问题,目前业界通常使用公有云的云存储服务,比如阿里云、腾讯云、七牛云、又拍云对象存储方案。当然也有使用自建方案,通常使用 HDFS、FastDFS、Ceph、Minio 等开源方案,这些方案不仅仅解决了存储上限的问题,多副本的架构设计同时解决了文件丢失与恢复的问题。

  • 容器化与编排

现代 APaaS 应用都应当以微服务化为基础架构准则,基于微服务的应用方能引入容器化以及容器编排标准 Kubernetes。容器以及使用编排工具带来的技术与运维优势是显而易见的,它带来了高效的资源管理,无缝的服务扩展,高可用的服务,以更低成本和大规模的运营,以及高效的跨云管理等。明道云的私有部署版本主要基于容器技术运行,也提供 Kubernetes 的部署版本,SaaS 版本运行在 Kubernetes 集群下。它能够和 SaaS 版本保持核心代码一致,但满足了不同类型的客户需求。

  • 云服务

云计算不仅为我们提供了云主机服务,还提供了多样的计算、存储、数据、文件等 PaaS 类服务。在此基础上,我们可以充分使用云计算服务,我们只需要关注我们应用上层逻辑,无需更多关注运行环境、运维保障等非工程事务,如我们可以使用云计算环境下的负载均衡、容器服务、RDS、消息队列、云函数等服务,充分发挥云计算给我们带来的技术红利。

以上所列技术栈是现代 APaaS 通常采用的方案,相信随着云计算的发展与深入,以及物联网、5G 的发展,未来会有更多的技术栈与社区涌现出来!明道云作为现代 APaaS 服务的典型代表,也一直关注着技术前沿,也保持着技术栈的迭代与升级,我们也希望通过技术升级来提升用户体验与产品的可靠性。