系统设计

系统设计实践

短链接服务系统开发

短链接

系统分库分表改造的注意事项

分表改造注意事项

分表位确定规则

往报-自己的请求:截取 ipid ;
来报-别人的请求:流水号的hashcode对100取余;

系统设计基础知识

系统安全

对外输出的 web程序 必须要做的安全检测:referer, cors, redirect, fileupload等,可以依赖一些开源的安全包,做个性化配置。

应用模块化的最佳实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<modules>
<module>app/core/service</module>
<module>app/core/model</module>
<module>app/biz/shared</module>
<module>app/biz/service-impl</module>
<module>app/common/util</module>
<module>app/common/service/facade</module>
<module>app/common/service/integration</module>
<module>app/common/dal</module>
<module>app/web</module>
<module>app/test</module>
<module>app/bootstrap</module>
</modules>

facade –api接口(本地实现并暴露tr服务)和spi接口(用于回执,他人实现并消费tr服务);
integration –工程reference的tr服务(别人的api);
core-service –通过类 ClientFactory 引入tr服务(自己的spi);
biz-service-impl –工程service的tr服务(别人的spi,自己的api);

服务器、数据库资源

xxx实际上这边第一年大概20-30万客户,单日累计扣款查询等指令不会超过一万,但是压测的时候要求是200-400tps。 tps不超过1000的话,统一所有应用4个4c/8g的容器就可以;数据库 32c64g,最大连接数 250。

设计原则

  • 单一责任原则
  • 开放封闭原则
  • 里氏替换原则
  • 接口分离原则
  • 依赖倒置原则

设计模式

创建型

  • 简单工厂:在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口,通过不同的入参返回不同的对象。
  • 工厂方法:定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。(有些像 模板方法+简单工厂 的组合)
  • 抽象工厂:提供一个接口,用于创建 相关的对象家族 。抽象工厂模式用到了工厂方法模式来创建单一对象;
    • 至于创建对象的家族这一概念是在 Client 体现,Client 要通过 AbstractFactory 同时调用两个方法来创建出两个对象。
  • 工厂方法 与 抽象工厂
    • 从高层次来看,抽象工厂使用了组合,即 Client 组合了 AbstractFactory,而工厂方法模式使用了继承。
  • 生成器(英文 Builder):封装一个对象的构造过程,并允许按步骤构造。
  • 策略模式 与 模板方法 的区别
    模板方法 侧重于继承结构,父类定义模板(或流程),子类重写指定方法;
    策略模式 侧重于环境中的变化条件,根据不同的条件选择对应的策略。
  • 访问者模式:两个要素,集合或组合对象,新能力-访问者。