设计指导原则

设计指导原则

一. 性能相关:

  1. 避免在循环内部new一些没有必要每次都new的对象。
  2. 所有与IO相关的操作,都需要考虑性能问题,一般采取的措施是连接池,缓存,减少调用次数,合并请求。
  3. 每个业务都要分析整个请求链路,找到瓶颈,通过压测的方式确认问题及验证解决方案。
  4. 根据业务情况,使用异步化和最终一致性。
  5. CPU,内存,网络IO,磁盘IO这些瓶颈,需要知道在合适的场景牺牲什么换取什么。通俗的讲是空间换时间,还是时间换空间。不同业务场景下,要做合理的取舍。例如多线程并发查询后merge。这个就是利用CPU,内存换取速度。
  6. 善于借鉴业界成熟通用的解决方案来解决问题。要知道什么场景适合用什么,每个产品的最佳实践是什么要清楚。
  7. 学会通过业务视角解决技术问题。例如:如果没有分库分表,支付宝的大量交易数据的并发性,可能永远无法解决。适当的时候,需要根据用户ID去分库分表,分散数据库IO瓶颈。避免只从技术角度考虑问题,陷入死胡同。
  8. 使用新技术新协议时,一定要分析出最佳使用场景,不能盲目相信。搞懂原理,才能通过最佳实践发挥性能优势。

监控相关:

  1. 监控分为系统监控,应用监控,业务监控。系统监控一般监控网络IO情况,磁盘IO,空间,CPU,内存等等。应用监控一般监控JVM的内存,GC情况,日志中的异常情况,SQL,SPRING方法等的耗时情况。业务监控一般监控一些业务指标,如PV,UV,交易的变化趋势等等具有业务含义的数据。
  2. 做好容量规划,避免无法支持业务增长,监控好容量。
  3. 对于调用链路非常深的系统,做好链路监控,及时发现瓶颈。

安全相关:

  1. 不要为了维护方便,在代码里留后门;之前review代码发现有这些问题。
  2. 涉及到用户密码等,一定要散列哈希算法加密存储。
  3. 关键用户敏感数据(如:信用卡数据)不能存日志文件中,避免主机漏洞被拖拽。很多互联网公司就发生了这样的事情。
  4. 要考虑完整业务链路的安全,不仅仅是某一端的安全问题。
  5. 充分利用公司已有的安全团队的产品及规范,避免产品出现安全漏洞,代码安全这块加强和安全同学一起REVIEW。
  6. 要注意开发环境和生产环境信息做隔离,避免因在开发环境中泄露导致生产环境安全问题。
  7. 不在外网分享带有业务规则及需要保密信息的内部文档。

规范相关:

  1. 幂等性:所有对外暴露的接口,需要做到幂等性。
  2. 隔离性:对同一个数据源的操作,建议由一个服务向外暴露,避免多个不同系统操作同一个数据源,特别是避免修改操作。
  3. 对开源的第三方包,一定要有源码。
  4. 线程安全:要时刻关注线程安全问题。每个业务都要考虑代码是否是线程安全的。
  5. 关于编程模型,不做强制要求;但是有一个原则就是,这块技术是主流的,外部容易招聘到相关人才,技术体系是完善的,容易学习和发展定制。
  6. 关键代码及业务逻辑,一定要有注释。
  7. 每个系统的设计及需求,接口等,一定要有文档。方便沟通交流以及团队的传承交接。
  8. 不用存储过程去实现复杂的业务逻辑,原则见第2点。
  9. 日志记录,格式要统一,存储路径和位置,以及磁盘满了之后日志转移的机制要完善。
  10. 系统设计一定要组织Review,避免设计的不合理导致后续扩展性不好。Review的角度,考虑业务的扩展性及发展方向是一个重点。
  11. 重点业务的单元测试和接口测试用例一定要有且全面,要养成用单元测试和接口测试来保证业务逻辑正确性的习惯,且还能大大提高后期系统维护的成本;
  12. 统一使用PE提供的运行环境和容器,特殊定制化容器场景一定要充分测试。

异常处理相关:

  1. 要区分好业务异常还是系统异常。为每种异常定义好处理方式。
  2. 避免抛出大量异常不处理。
  3. 异常为了方便系统间传输,一般需要约定errorCode。例如场景:可以根据错误编码,将异常翻译成多国语言。
  4. 跨进程调用,不要将整个异常堆栈传递过去。

设计模式相关:

  1. 模块之间避免循环依赖
  2. 尽量使用接口解耦应用
  3. 代码中使用分层设计的思想
  4. 高内聚低耦合

设计指导原则

时间: 2024-11-05 14:47:40

设计指导原则的相关文章

三、状态机的设计指导原则

---恢复内容开始--- 1.状态机设计关键是什么? 如何才能把一个电路系统抽象为一个或者多个相互配合嵌套的状态机和组合系统模块?是关键. ---恢复内容结束--- 1.状态机设计关键是什么? 如何才能把一个电路系统抽象为一个或者多个相互配合嵌套的状态机和组合系统模块?是关键.

设计抗混叠滤波器的三大指导原则(转载)

原文地址:http://www.ednchina.com/ART_8800523945_28_19999_TA_f443c125.HTM?click_from=8800032061,9950148743,2015-12-19,EDNCOL,NEWSLETTER 抗混叠滤波器的设计包括一个过采样架构和一个补充数字抽取滤波器.这个过采样架构将那奎斯特频率放置在远离信号带宽的位置上,而数字抽取滤波器衰减大多数有害的带外信号.当把二者组合在一起时,它们可以实现更加自由的抗混叠滤波器响应,只需几个分立式组

Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则

因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机).建议采用case语句来建立状态机的模型,因为这些语句表达清晰明了,可以方便的由当前状态转向下一个状态并设置输出.记得:不要忘记在case语句的最后写上default分支,并将状态设置为'bx这就等于告诉综合器case语句已经指定了所有的状态.这样综合器就可以删除不必要的译码电路使生成

【转】ADI的良好接地指导原则

ADI的良好接地指导原则 接地无疑是系统设计中最为棘手的问题之一.尽管它的概念相对比较简单,实施起来却很复杂,遗憾的是,它没有一个简明扼要可以用详细步骤描述的方法来保证取得良好效果,但如果在某些细节上处理不当,可能会导致令人头痛的问题. 对于线性系统而言,"地"是信号的基准点.遗憾的是,在单极性电源系统中,它还成为电源电流的回路.接地策略应用不当,可能严重损害高精度线性系统的性能. 对于所有模拟设计而言,接地都是一个不容忽视的问题,而在基于PCB的电路中,适当实施接地也具有同等重要的意

第六节:指导原则和最佳实践

理解异常机制固然重要,但同等重要的是理解如何正确使用异常.我经常发现类库开发人员捕捉所有类型的异常,造成应用程序开发人员对问题不知情.本章就异常的使用提供一些指导原则. 重要提示    如果你是类库开发人员,要设计供其他开发人员使用的类型,那么一定要严谨按照这些指导原则行事.你的责任非常重大,要精心设计类库中的类型,使之适用于各种各样的应用程序.记住,你无法做到对自己要调用的代码了如指掌,也不知道哪些代码会调用你的代码.由于无法预知使用类型的每一种情形,所以不要做出任何策略抉择,换言之,你的代码

何时使用引用、指针、按值传递的一些指导原则

问题提出: 1.当一个类的对象作为实参数传递时,使用值传递和引用传递有什么区别?   比如: DateType ExampleFun(CString &strFileName,...)与         DateType ExampleFun(CString strFileName,...) 解答之前,我们先来看2个基本的概念:形参和实参. ->通俗的讲:形参是形式上的参数,实参是实际的参数;->详细的讲:形参只是对实参的一种抽象类型描述,只是声明一个函数(方法)能接受什么类型的实参,

面向对象可复用设计几大原则

1.开-闭 原则:指的是一个软件实体应该对扩展开放,对修改关闭.用面向对象的语言来讲就是:不允许修改的是系统的抽象层,允许扩展的是系统的具体实现层. 2.里氏代换原则:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别. 3.依赖倒转原则:要求客户端依赖于抽象耦合. 另一种表述是:要针对接口编程,不要针对实现编程(Program to an interface , not an implementation). 如果设计师希望遵守"开-闭&q

openstack 升级设计要求的指导原则

不知道其他软件有没有类似的指导原则. Theory of Upgrade Grenade works under the following theory of upgrade. New code should work with old configs(新代码兼容旧的配置) The upgrade process should not require a config change to run a new release. All config behavior is supposed to

shell软件工具设计的原则_转

随着时间的流逝,人们开发出了一套设计与编写软件工具的原则.在本书用来解决问题的程序中,你将会看到这些原则的应用示例.好的软件工具应该具备下列特点:一次做好一件事在很多方面,这都是最重要的原则.若程序只做一件事,那么无论是设计.编写.调试.维护,以及生成文件都会容易得多.举例来说,对于用来查找文件中是否有符合样式的grep程序,不应该指望用它来执行算术运算.这个原则的结果,自然就是会不断产生出更小.更专用于特定功能的程序,就像专业木匠的工具箱里,永远会有一堆专为特定用途所设计的工具.处理文本行,不