AFK架构设计思想概述

一、AKF的核心思想

AKF架构设计的核心思想源于对系统可扩展性、可用性和灵活性的深刻理解。AKF(Availability, Scalability, Flexibility)架构模型由Martin L. Abbott和Michael T. Fisher在《The Art of Scalability》一书中提出,旨在帮助工程师和架构师设计具有高度可用性、可扩展性和灵活性的系统。

1.1 可用性(Availability)

可用性是指系统在任何时刻都能够对外提供服务的能力。高可用性系统能够保持对用户的响应,即使部分组件或节点发生故障。实现高可用性通常涉及到冗余部署、负载均衡、故障恢复等技术手段。例如,通过主从、主主、主备等模式实现数据备份,确保在单一节点发生故障时,其他节点能够迅速接管服务,保证系统持续运行。

1.2 可扩展性(Scalability)

可扩展性衡量系统能够处理和适应不断增长的负载的能力。可扩展性体现在系统可以有效地扩展到更大的规模,以满足用户需求。可扩展性可以通过水平扩展(增加节点、服务器)和垂直扩展(增加单个节点的资源)来实现。水平扩展是AKF架构设计中的一个重要原则,通过增加更多的服务器和应用实例,可以显著提高系统的吞吐量和并发处理能力。

1.3 灵活性(Flexibility)

灵活性是指系统在应对变化和新需求时的灵活性。灵活性体现在系统的架构、设计和实现上,使其能够适应未来的变化和新的业务需求。灵活性与可维护性、可扩展性等概念紧密相关。在AKF架构设计中,灵活性通常通过模块化、服务化、前后端分离等手段实现,使得系统能够轻松应对业务变化和技术升级。

二、AKF原则和目标

2.1 设计原则

AKF架构设计的设计原则主要包括以下几个方面:

  1. 无状态服务:无状态服务是指服务本身不保存任何客户端的状态信息,所有状态信息都保存在客户端或者外部存储系统中。无状态服务使得系统能够更容易地进行水平扩展和负载均衡。
  2. 前后端分离:前后端分离是指将前端界面和后端逻辑分离开发、部署和维护。这种分离使得前后端能够独立演进,提高开发效率和系统的可维护性。
  3. RESTful通信风格:RESTful通信风格是一种基于HTTP协议的网络应用设计风格,它使得客户端和服务器之间的通信更加简洁、高效和标准化。
  4. AKF拆分原则:AKF拆分原则将系统扩展分为X轴、Y轴和Z轴三个维度。X轴表示通过水平复制应用进程来扩展系统;Y轴表示通过划分业务职能边界建立领域模型,拆分应用和设计微服务;Z轴表示通过数据分片策略,将数据集拆分为多个数据子集或业务单元。

2.2 设计目标

AKF架构设计的核心目标是构建一个高可用、可扩展、灵活的系统架构,以满足不断增长的用户需求和业务变化。具体设计目标包括:

  1. 提高系统可用性:通过冗余部署、负载均衡、故障恢复等技术手段,确保系统在任何时刻都能够对外提供服务。
  2. 增强系统可扩展性:通过水平扩展和垂直扩展等手段,使系统能够有效地处理不断增长的用户负载和业务需求。
  3. 提升系统灵活性:通过模块化、服务化、前后端分离等手段,使系统能够轻松应对业务变化和技术升级。

三、实践案例

3.1 案例背景

以中国人民保险(PICC)的核心系统升级为例,随着业务持续快速发展和商业模式转型升级,PICC的核心系统面临着巨大的挑战。特别是在“双十一”“双十二”等业务高峰期间,以及业务政策发生重大变化的节点,传统集中式架构存在扩展能力差、不能自动弹性扩缩等问题,难以满足业务需求。

3.2 设计过程

为了应对这些挑战,PICC启动了信息系统新架构的研究工作,提出了向高质量发展转型的“3411”工程。在此背景下,PICC决定采用分布式微服务架构对核心系统进行升级。在设计过程中,PICC遵循了AKF架构设计的核心思想和设计原则,通过以下几个方面进行了系统架构设计:
在这里插入图片描述

  1. 总体设计思路:采用冗余或模块拆分的方式,使业务和应用具有更强的扩展能力,实现高可用。AKF扩展立方体模型被用作指导分布式架构能力建设的方法论,通过X轴、Y轴和Z轴三个维度提升系统的可扩展能力。
  2. 业务建模与微服务设计:从业务视角出发,完成业务领域边界划分和领域建模,然后将领域模型作为微服务设计的输入,将单体应用拆分为一个个边界清晰、业务职责单一、可以轻松演进的微服务。通过分治策略,化整为零,打破了传统的系统概念。
  3. 分布式架构技术体系建设:建立分布式架构技术体系,涵盖开发、测试、运维等软件开发全生命周期,实现各类技术组件的平台化、标准化。具体包括前端开发框架、微服务开发框架、微服务治理组件、分布式数据库以及分布式架构下诸如复制、同步等数据处理相关的技术组件。

3.3 实现过程

在实现过程中,PICC采取了以下关键步骤:

  1. 建立人保云平台:完成IaaS层基础资源和PaaS层技术组件资源的云服务化,实现基础资源的统一管理、快速扩容、统一调度和自动分配,支持应用和数据库的弹性扩缩、快速部署和稳定运行。
  2. 微服务拆分与部署:将单体应用拆分为微服务后,按照TwoPizzaTeam团队建设原则组建项目团队,实施敏捷开发。微服务部署包相对较小,可以更好地上云,实现应用的弹性扩缩,提高自动化运维能力。
  3. 数据分片与单元化设计:采用数据分片策略和单元化设计,提升数据和业务单元的可扩展性,提高数据中心业务承载能力,从企业全局建立多中心多活的能力,实现应用的高可用。

3.4 实际应用效果

通过采用AKF架构设计的核心思想和设计原则,PICC的核心系统成功实现了分布式微服务架构转型。实际应用效果表明,新的架构显著提高了系统的可用性和可扩展性,能够轻松应对业务高峰期间的巨大负载,同时降低了运维成本和技术复杂度。此外,新的架构还提升了系统的灵活性,使得系统能够更快地响应业务变化和技术升级。

四、不同场景应用

AKF架构设计的核心思想和设计原则在不同业务领域具有广泛的应用场景。以下是一些典型的应用场景:

  1. 电子商务平台:电子商务平台面临着巨大的用户访问量和交易负载,AKF架构设计通过水平扩展和数据分片等手段,可以显著提高系统的吞吐量和并发处理能力,确保平台在高并发访问下的稳定运行。
  2. 金融系统:金融系统对可用性和安全性要求极高,AKF架构设计通过冗余部署、负载均衡和故障恢复等技术手段,确保系统在任何时刻都能够对外提供服务,同时保障数据的安全性和完整性。
  3. 物联网平台:物联网平台需要处理大量的设备连接和数据传输,AKF架构设计通过微服务化和数据分片等手段,可以实现对设备连接和数据传输的高效管理和优化,提高平台的可扩展性和灵活性。
  4. 云计算平台:云计算平台需要提供弹性可扩展的计算和存储资源,AKF架构设计通过资源池化和自动化运维等手段,可以实现对计算和存储资源的动态管理和优化,提高平台的可扩展性和资源利用率。

五、评价和建议

5.1 评价

AKF架构设计通过引入可扩展性、可用性和灵活性三个关键属性,为系统架构设计提供了一种全面而系统的解决方案。AKF拆分原则将系统扩展分为X轴、Y轴和Z轴三个维度,使得系统能够灵活应对不同场景下的扩展需求。同时,AKF架构设计还强调前后端分离、无状态服务、RESTful通信风格等现代软件设计原则,使得系统能够轻松应对业务变化和技术升级。

然而,AKF架构设计也存在一些挑战和限制。例如,在Y轴和Z轴扩展过程中,需要进行大量的代码重构和测试工作,实施成本较高。此外,在分布式系统中,如何保证数据的一致性和完整性也是一个重要的问题。

5.2 建议

针对AKF架构设计的挑战和限制,以下是一些建议:

  1. 合理规划扩展策略:在进行系统扩展时,需要根据业务需求和技术条件合理规划扩展策略。例如,在初期阶段可以采用X轴扩展来提高系统容量和吞吐量;在业务复杂度较高、数据量较大的情况下,可以采用Y轴和Z轴扩展来优化系统性能和资源利用率。
  2. 加强数据一致性管理:在分布式系统中,数据一致性是一个重要的问题。可以采用CAP定理和BASE理论来指导数据一致性管理。例如,在一致性要求较高的场景下可以采用强一致性模型;在可用性要求较高的场景下可以采用最终一致性模型。
  3. 提高系统可维护性:在进行系统设计时,需要注重系统的可维护性。可以采用模块化、服务化、前后端分离等手段降低系统耦合度;采用自动化运维工具提高运维效率和质量。

六、未来

随着云计算、大数据、人工智能等新技术的不断发展和应用,AKF架构设计也将不断演进和发展。未来可能的发展趋势包括:

  1. 更加智能化的运维管理:随着自动化运维工具的不断发展和应用,未来的运维管理将更加智能化和自动化。AKF架构设计将更加注重运维管理的智能化和自动化水平,以提高系统的稳定性和可用性。
  2. 更加灵活的服务编排和组合:随着微服务架构的不断发展和应用,未来的服务编排和组合将更加灵活和高效。AKF架构设计将更加注重服务编排和组合的灵活性和高效性水平,以提高系统的可扩展性和灵活性。
  3. 更加紧密的云原生集成:随着云原生技术的不断发展和应用,未来的系统架构将更加紧密地与云原生技术集成。AKF架构设计将更加注重与云原生技术的融合,如Kubernetes、Serverless、Service Mesh等,以提高系统的云原生能力和可扩展性。
  4. 更加注重数据治理和安全性:随着数据成为企业越来越重要的资产,未来的系统架构将更加注重数据治理和安全性。AKF架构设计将更加注重数据的一致性、完整性、可用性和安全性,采用更加先进的数据治理和安全技术,如区块链、数据脱敏、隐私计算等,以确保数据的安全和合规性。
  5. 更加关注可持续发展和绿色计算:随着全球对可持续发展和环境保护的重视,未来的系统架构将更加注重可持续发展和绿色计算。AKF架构设计将更加注重系统的能效和环保性,采用更加节能的技术和方案,如绿色数据中心、低碳计算等,以降低系统的能耗和碳排放。

七、结尾

AKF架构设计作为一种全面而系统的解决方案,为系统架构设计提供了重要的指导思想和设计原则。通过深入理解AKF架构设计的核心思想、设计原则和设计目标,并结合实际案例和应用场景,我们可以更好地应用AKF架构设计来构建高可用、可扩展、灵活的系统架构。

同时,我们也需要不断关注新技术的发展和应用,不断探索和实践新的架构设计方法和方案,以适应不断变化的市场需求和业务挑战。通过持续创新和改进,我们可以构建更加高效、智能、安全、可持续的系统架构,为企业的数字化转型和业务发展提供有力的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【layui】echart的简单使用

图表类型切换&#xff08;柱形图和折线图相互切换&#xff09; <title>会员数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a lay-href""&g…

期权开户难不难?期权开户成功后当天是否能交易

期权开户难不难&#xff1f;这取决于投资者的准备情况和所选的开户途径。对于满足一定资金和经验要求的投资者来说&#xff0c;通过正规期货公司或期权交易平台进行开户&#xff0c;虽然流程相对复杂&#xff0c;但只要遵循步骤&#xff0c;仍然可以顺利完成&#xff0c;下文为…

Java并发无锁篇--乐观锁(非阻塞)

共享模型之无锁 问题提出 package com.zjy.unlock;import java.util.ArrayList; import java.util.List;public class AccountDemo {public static void main(String[] args) {Account account new AccountUnsafe(10000);Account.demo(account);} }class AccountUnsafe impl…

分享三个python爬虫案例

一、爬取豆瓣电影排行榜Top250存储到Excel文件 近年来&#xff0c;Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程序&#xff0c;用于抓取豆瓣电影Top250的相关信息&#xff0c;并将其保存为Excel文件。 获取网页数据的函数&#xff0c;包括以…

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><center><h3>简单水平菜单导航栏</h3></center><hr /><nav><ul&g…

Spring Plugin与策略模式:打造动态可扩展的应用

目录 一、策略模式 二、Spring Plugin 2.1 Spring Plugin 实现策略模式开发 2.2 策略模式优缺点 三、Spring Plugin 原理 一、策略模式 策略模式是一种设计模式&#xff0c;它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个…

spark的学习-05

SparkSql 结构化数据与非结构化数据 结构化数据就类似于excel表中的数据&#xff08;统计的都是结构化的数据&#xff09;一般都使用sparkSql处理结构化的数据 结构化的文件&#xff1a;JSON、CSV【以逗号分隔】、TSV【以制表符分隔】、parquet、orc 结构化的表&#xff1a;…

Android 源码的下载与编译

Android 源码的下载与编译 本章节主要介绍安卓系统的编译以及编译产物&#xff0c;根据我自己的经验只总结个人觉得重要的部分。 有价值的博客&#xff1a; https://blog.csdn.net/wuye110/article/details/8463409 https://juejin.cn/post/7288166472131018786 值得一看的…

基于Python的药房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Golang | Leetcode Golang题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; type point struct{x, y int }var dirs []point{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func updateMatrix(mat [][]int) [][]int {var m, n len(mat), len(mat[0])var res make([][]int, m)var visited make([][]bool, m)var queue []poin…

vscode通过remote-ssh连接远程开发机

文章目录 安装扩展注意事项:tips其他参数安装扩展 安装VS Code和SSH-Remote扩展:首先,需要确保你已经在本地计算机上安装了VS Code,并且在扩展市场中搜索并安装了"Remote - SSH"扩展。配置SSH:在本地计算机上,打开VS Code的命令面板(使用快捷键"Ctrl+Shi…

Golang | Leetcode Golang题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; const mod int 1e9 7type matrix [6][6]intfunc (a matrix) mul(b matrix) matrix {c : matrix{}for i, row : range a {for j : range b[0] {for k, v : range row {c[i][j] (c[i][j] v*b[k][j]) % mod}}}return c }func (a matrix) p…

关于CountDownLatch失效问题

一、项目背景 这几天要开发一个类似支付宝那种年度账单统计的功能&#xff0c;就是到元旦后支付完会把用户这一年的消费情况从各个维度&#xff08;我们把这一个维度称作一个指标&#xff09;统计分析形成一张报告展示给用户。 这个功能实现用到了CountDownLatch。假如统计分析…

ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 ROS-Noetic 一、问题描述 自己在通过 pip install 安装module时 &#xff08;使用的是 pip install mmcv&#xff09;遇到如下问题&#xff1a; ImportError: cannot …

「Mac畅玩鸿蒙与硬件30」UI互动应用篇7 - 简易计步器

本篇将带你实现一个简易计步器应用&#xff0c;用户通过点击按钮增加步数并实时查看步数进度&#xff0c;目标步数为 10000 步。该项目示例展示了如何使用 Progress 组件和 Button 组件&#xff0c;并结合状态管理&#xff0c;实现交互式应用。 关键词 UI互动应用计步器Button…

多媒体信息检索

文章目录 一、绪论二、文本检索 (Text Retrieval)(一) 索引1.倒排索引2.TF-IDF (二) 信息检索模型 (IR模型&#xff0c;Information Retrieval)1.布尔模型 (Boolean模型)(1)扩展的布尔模型 (两个词)(2)P-Norm模型 (多个词) 2.向量空间模型 (Vector Space Model&#xff0c;VSM)…

在vscode中如何利用git 查看某一个文件的提交记录

在 Visual Studio Code (VSCode) 中&#xff0c;你可以使用内置的 Git 集成来查看某个文件的提交历史。以下是具体步骤&#xff1a; 使用 VSCode 内置 Git 功能 打开项目&#xff1a; 打开你的项目文件夹&#xff0c;确保该项目已经是一个 Git 仓库&#xff08;即项目根目录下…

vue2 -- el-form组件动态增减表单项及表单项验证

需求 在数据录入场景(如订单信息录入)中,可根据实际情况(如商品种类增加)动态添加表单项(如商品相关信息)。包含必填项验证和数据格式验证(如邮箱、电话格式),防止错误数据提交。 效果 代码一 <template><div>

使用 Elasticsearch 构建食谱搜索(一)

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 Elasticsearch 构建基于语义搜索的食谱搜索。 简介 许多电子商务网站都希望增强其食谱搜索体验。正确使用语义搜索可以让客户根据更自然的查询&#xff08;例如 “something for Valentines Day - 情人节的礼物” 或 “…

SystemVerilog学习笔记(七):函数与任务

函数 函数的主要用途是编写一段可以随时调用n次的代码&#xff0c;只需调用函数名即可&#xff0c;不需要任何模拟时间来执行。函数是返回类型&#xff0c;仅返回函数声明中提到的单个值&#xff0c;如果未声明则返回一个位的值。 语法&#xff1a; initial begin functio…