java架构设计
1.可维护性
封装性,例如将缓存redis封装到一个service,别的地方用到,只需要传参调用就行。如果有一天换国产缓存,只需要修改service,而不需要修改多出引用地方
* 可维护性:后期功能迭代,不可避免,不要因为一个小的改动,导致大面积的修改代码,做到高内聚低耦合!!
> * 比如我们短信平台,在涉及做缓存和搜索功能时,我会单独提供一套缓存服务和搜索服务,甚至支付也一样,单独提供一个支付的服务。这下额服务只对外暴露基本的功能接口。如果后期涉及到了一些政策原因,其他原因,导致你需要去替换中间件,比如将Redis缓存中间件替换为其他的国产化的缓存组件。 因为前面的设计,我不需要去改动我的业务服务里的任何内容,只需要在缓存服务中,将之前Redis的API,替换为国产化的缓存的API即可,其他的不需要动。
> * 可扩展性:需要主动追加一些额外的功能或者方向时,可以更方面的动态增减功能,其他功能不会受到影响。
> * 比如我们短信平台,在策略以及接口模块中的校验时,采用了策略设计模式 + 责任链模式做到动态可插拔的校验规则,如果后期需要拓展校验规则,只需要去继承校验接口去做具体的实现,然后修改用户的校验规则字段,就可以很方便的、扩展功能。
> * 安全性:安全是每个产品都必须考虑的点,所有很多加密算法要考虑好,比如你们的数据传输时,可以上非对称加密,对称加密,各种国密,(AES,RSA,SM1,2,3,4会就聊),还有一些敏感数据的过滤,在一些XSS攻击,注入攻击,CSRF攻击,这些都需要考虑,而且后期HTTPS也是必上的。
> * 性能:比如基本的CND,DNS优化,缓存的设计,分库分表,合理的中间件,多线程。。。。
> * 容错兜底:比如熔断,降级,做好兜底。 限流方便的考虑,还有MQ做削峰,部署的时候要规避单点故障问题,每个服务至少两台节点。 还可以考虑一些异地多活,其次还有数据的冗余备份。
> * 监控…………普罗米修斯。
> * 弹性伸缩…………GraalVM