架构学习笔记

本文探讨了架构设计的目的、复杂度来源及应对策略,包括高性能、高可用、高扩展、低成本和安全等方面。介绍了架构设计的三个原则:合适、简单、演化,并详细讨论了架构设计流程,如识别复杂度、备选方案设计和详细方案设计。此外,还深入讲解了高性能数据库集群、缓存架构和高可用性的实现方法。

架构设计的主要目的是为了解决软件系统复杂度带来的问题

当我们对这样一个系统进行架构设计的时候,首先应识别其复杂度到底体现在哪里。

复杂度来源:

高性能

单机性能,集群性能

高可用

计算(轮询,分发)的高可用,存储的高可用

高扩展

提炼出一个“抽象层”和一个“实现层”,依赖接口,不要依赖具体实现  

低成本

低成本与高性能相冲突

安全

功能安全,常见的 XSS 攻击、CSRF 攻击、SQL 注入、Windows 漏洞、密码破解等

架构安全

防火墙

规模

功能越来越多,导致系统复杂度指数级上升
数据越来越多,系统复杂度发生质变

架构设计的三个原则

1,合适原则

人力物力,合适优于业界领先

2,简单原则

简单优于复杂

3,演化原则

版本迭代,演进,演化优于一步到位

架构设计流程

1,排除法识别复杂度

对于架构师来说,关注的不是一天的数据,而是 1 秒的数据,即 TPS 和 QPS

2,设计架构的备选方案

3,详细方案设计

高性能数据库集群

1,读写分离

2,分库分表

3,NoSQL

高性能缓存架构

1,更新锁

对缓存更新操作进行加锁保护,保证只有一个线程能够进行缓存更新

2,后台更新

后台线程除了定时更新缓存,还要频繁地去读取缓存(例如,1 秒或者 100 毫秒读取一次),如果发现缓存被“踢了”就立刻更新缓存,这种方式实现简单,但读取时间间隔不能设置太长,因为如果缓存被踢了,缓存读取间隔时间又太长,这段时间内业务访问都拿不到真正的数据而是一个空的缓存值,用户体验一般。业务线程发现缓存失效后,通过消息队列发送一条消息通知后台线程更新缓存。可能会出现多个业务线程都发送了缓存更新消息,但其实对后台线程没有影响,后台线程收到消息后更新缓存前可以判断缓存是否存在,存在就不执行更新操作。这种方式实现依赖消息队列,复杂度会高一些,但缓存更新更及时,用户体验更好。

高可用

一致性

A read is guaranteed to return the most recent write for a given client.

对某个指定的客户端来说,读操作保证能够返回最新的写操作结果

可用性

A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).

非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)

分区容错性

The system will continue to function when network partitions occur.

当出现网络分区后,系统能够继续“履行职责”

FMEA 方法:排除架构可用性隐患的利器

应对接口级的故障

1,降级(丢车保帅):停掉非核心业务

2,熔断(保险丝):按策略停掉服务间的调用

3,限流(我只能处理这么多):

基于请求限流(系统外部):
根据阈值来限制访问量,负载均衡系统,网关系统,抢购系统。

基于资源限流(系统内部):
常见的内部资源有:连接数、文件句柄、线程数、请求队列等
(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值