系统之技术设计原则

简介: 微服务架构-技术设计原则

基本原则

好系统是迭代出来的,先解决核心的问题.

不要过度复杂设计.

可以适当先行的预估规划设计.

无状态设计原则

尽可能的使用无状态设计,无状态的意思就是说当前请求不会依赖于其他的请求,要么就是存储在数据源中,不能存储在当前的服务器上.

无状态设计对系统设计来说意味着水平扩容,常见的比如说共享session扩容就会十分麻烦,因为每台服务器的内存中都会有session,这是有状态的,服务器需要记录,扩容会相对麻烦,如果使用token则没有此问题,机器请求一上去就直接水平加机器,也是最方便的解决方式.

拆分系统

用户量大.

业务复杂.

拆分大纲是高内聚,低耦合。

一般都是根据系统业务进行拆分.

比如优惠卷系统.

可以和有能力的产品经理或者架构师配合.

随着每一个接口或者模块的业务量越来越细,我们可以根据功能维度进行拆分.

优惠卷发放功能.

创建优惠卷功能.

领取优惠卷功能.

之后服务甚至可以对接其他相关的平台.

为什么我们已经根据系统的维度进行拆分了,还需要根据功能的维度进行拆分呢?

因为从系统稳定性的角度考虑,无论是发版还是说提需求,假设你有个用户系统和订单系统,有一个需求牵连到2个系统,那么相当于是2个系统都需要重新发版,而且会增加跨部门沟通的联调成本,如果我们从功能维度进行拆分的话,就不需要考虑这么多的问题呢.

读写原则

可以按照读写服务进行拆分,比如查询是一个服务,数据写入又是一个服务,其中数据写入服务单独拆分出来,还能对接其他的服务。

读服务: 多级缓存。 redis,网关(负载),CDN,DNS。

写服务: 分区,分库,分表。

切面原则

用户分流,在用户人数特别多的时候做切面,引导用户到附近城市的CDN。

CDN里一般都是存放着静态数据,不用频繁更新的那种,每个城市的数据也基本一致。

其实可以理解为拦截器,里面还可以添加黑白名单,权限校验等等。

模块原则

有些可能会被称为基础架构组。

可以理解为二方库,在原有模块上做开发,提供公共模块。

让其他服务的人也可以调用,比如综合消息队列,综合短信发送模块。

对外接口提供统一配置,让别人无需关注底层的实现。

服务化原则

流量是不可控的,要提前做好限流,熔断,降级,隔离,恢复的方案。

因为调用的服务一多,就容易出错,要做好服务出错的预处理方法,比如熔断和降级就能保证不会出现服务雪崩的问题,调用超时一直等待。

问题

所有需要鉴权的都是有状态的嘛?

其实不是这样的,比如我们的token,如果你执行一个创建订单的逻辑,但是创建之前你肯定需要登录呀,看起来是2次请求,但是实际上你单独执行第二次请求,假设你没有token,它是会直接跳转到登录界面的,所以其实是对业务没有影响的.

需要存储的token为什么是无状态的呢?

因为没有存储在服务器的内存当中,在真实场景中我们一般存储在redis下.

目录
相关文章
|
3月前
|
存储 Java 数据库连接
成为工程师 - 系统分层的设计原则
成为工程师 - 系统分层的设计原则
|
4月前
|
存储 设计模式 前端开发
软件架构设计的原则与模式:构建高质量系统的基石
【7月更文挑战第26天】软件架构设计是构建高质量软件系统的关键。遵循高内聚、低耦合、单一职责等设计原则,并灵活运用分层架构、微服务架构、客户端-服务器架构等设计模式,可以帮助我们设计出更加灵活、可扩展、可维护的软件系统。作为开发者,我们应该不断学习和实践这些原则与模式,以提升自己的架构设计能力,为团队和用户提供更加优秀的软件产品。
|
5月前
|
Java 关系型数据库 开发者
Java编程设计原则:构建稳健、可维护的软件基石
Java编程设计原则:构建稳健、可维护的软件基石
|
存储 缓存 搜索推荐
复杂系统设计原则与案例
## 一、复杂是软件的本质属性 ### 1.1 复杂是软件的本质属性 正如Brooks所言,软件复杂性是软件固有的属性,这种固有的复杂性主要由4个方面的原因造成的: - 问题域的复杂性 - 管理开发过程的复杂性 - 随处可变的灵活性 - 描绘离散系统行为的问题 上面每一个方面都有极大的挑战,以「问题域的复杂性」为例,现在我们的大型系统中,动不动就几十个应用,组合在一起就是一个复杂的系统,而每个
1448 4
复杂系统设计原则与案例
|
存储 安全 算法
从系统复杂性看软件架构
一、架构设计是为了解决系统复杂性整个软件技术发展的历史,其实就是一部与“复杂性”斗争的历史。架构也是为了应对软件系统复杂性而提出的一个解决方案,其主要目的是为了解决软件系统复杂性带来的问题。这里包括两个名词:系统和复杂性,下面分别对其进行解析1.1 复杂性的定义复杂性这个名词很复杂,麻省理工学院的物理学家塞思·劳埃德统计了复杂性的定义数量,至少有45种:信息 ,熵 ,算法复杂性 ,算法信息量 ,费
10583 2
从系统复杂性看软件架构
|
运维 安全 开发工具
系统之业务设计原则
系统之业务设计原则
114 0
|
设计模式 缓存 监控
【软件架构】支持大规模系统的设计模式和原则
【软件架构】支持大规模系统的设计模式和原则
|
设计模式 算法 Java
六大原则之外的设计原则|设计原则
在前面的几篇设计原则文章中,我们分别讲述了经典的六大设计原则。但是事实上,我们在开发中还有几个重要的设计原则,在这篇文章中,一并给大家讲述。
|
设计模式 关系型数据库 API
常用设计原则分析
对常用设计原则进行升入分析,探讨
159 0
|
敏捷开发 存储 运维
系统架构的11条原则
系统架构的11条原则
 系统架构的11条原则