随笔分类 - 业务.架构.方案
开发常见业务场景,解决方案,架构方式。
摘要:
通常在业务体系中,都会或多或少的涉及到支付相关的功能;对于一些经验欠缺同学来说,最紧张的就是面对这类支付结算的逻辑,因为流程中的任何细节问题,都可能引发对账异常的情况;错误发生之后,再想去修复流程,花费的时间成本又是高昂的,还牵扯错误数据的调平问题,最终很可能引发乱账算不清的结果,然后需要人工介入手动处理;
阅读全文

摘要:
在微服务的代码工程中,配置管理是一项复杂的事情,即需要做好各个环境的配置隔离措施,还需要确保生产环境的配置安全;如果划分的微服务足够的多,还要考虑配置更新时的效率;
阅读全文

摘要:
阅读源码最重要的是耐着心情慢慢看,并随手画下核心流程,实际上如果有一定的编程经验,不管是阅读什么工程的源码,只要用心去分析单点的实现原理,都算不上过度复杂。
阅读全文

摘要:
做这些业务设计时,核心思想是:把常用的逻辑进行封装,流程设计为可配置,这样即可在一定时间内应对业务的需求和变化,降低开发成本的支出,从而使研发更侧重核心业务的管理和抽象封装等内容。
阅读全文

摘要:
在系统开发的过程中,必然存在耗时极高的动作,是基于请求响应模式无法解决的问题,通常会采用解耦的思维,并基于异步或者事件驱动的方式去调度整个流程的完整执行。
阅读全文

摘要:
如果软件系统存在持续的迭代周期,那么其中业务、技术、架构的复杂性都会直线拉升,其相应的开发难度也会提高,随之而来的压力会持续在开发和测试之间来回横跳。
阅读全文

摘要:
HiKariCP作为SpringBoot2框架的默认连接池,号称是跑的最快的连接池,数据库连接池与之前两篇提到的线程池和对象池,从设计的原理上都是基于池化思想,只是在实现方式上有各自的特点;
阅读全文

摘要:
本文从对象池的一个简单案例切入,主要分析common-pool2组件关于:池、工厂、配置、对象管理几个角色的源码逻辑,并且参考其在Redis中的实践。
阅读全文

摘要:
线程池中维护多个线程,当收到调度任务时可以避免创建线程直接执行,并以此降低服务资源的消耗,把相对不确定的并发任务管理在相对确定的线程池中,提高系统服务的稳定性。
阅读全文

摘要:
微服务工程的架构是一项复杂和持续的过程,其中涉及到的组件也十分繁杂,本文只是选取Gateway、Nacos、Feign三个基础组件做简单的总结,在其逻辑的理解上需要围绕该组件的核心功能和项目使用的API作为切入点,时常查阅源码和官方文档。
阅读全文

摘要:
好记性不如好Log。项目中日志的管理是基础功能之一,不同的用户和场景下对日志都有特定的需求,从而需要用不同的策略进行日志采集和管理,如果是在分布式的项目中,日志的体系设计更加复杂。
阅读全文

摘要:
很多技术栈或者开源组件的不断发展,都是为了可以更好的解决场景问题,这就需要开发人员定期关注技术的发展趋势,具备技术视野和洞察能力。
阅读全文

摘要:
采用合理的策略去管理资源的权限并不是一件简单的事,通常随着业务和系统的不断扩展,对权限体系都会带来直接的影响,所以在做结构设计时,需要相对复杂但又要避免过度复杂。分布式系统中,通常从系统层、组织架构、权限关系三个方面去考虑可行方案。
阅读全文

摘要:
二次封装的方式,可以严格的控制技术栈的迭代扩展,以及版本冲突的问题,通过对二次封装层的统一升级,可以快速实现业务服务的升级,解决不同服务的依赖差异问题,较大程度的降低业务与技术的耦合。
阅读全文

摘要:
在系统开发初期,很容易出现这样一种情况:不同业务线上开发人员,因为技术栈和版本时间的影响,在选型的时候会优先使用自己熟悉的,例如MQ中间件常用的:Kafka、Rocket、Rabbit等,
阅读全文

摘要:
基于业务场景做好服务的划分和设计,以及公共服务的基础构建,确保业务层的架构合理且可扩展,是否合理的基本考量就是,不断的新增业务场景是否需要做系统的大刀阔斧的改版,如果服务能力不断丰富,系统的改造成本很小,自然架构合理。
阅读全文

摘要:RestHighLevelClient的API作为ElasticSearch备受推荐的客户端组件,其封装系统操作ES的方法,包括索引结构管理,数据增删改查管理,常用查询方法,并且可以结合原生ES查询原生语法,功能十分强大。在使用RestHighLevelClient的语法时,通常涉及上面几个方面,在掌握基础用法之上可以根据业务特点进行一些自定义封装,这样可以更优雅的解决业务需求。
阅读全文
摘要:有很多复杂的业务是很难理解的,但是又需要做一个量化分析,给业务人员或者运营,或者用户一个参考标准,例如常见指数,芝麻分数,店铺等级,这类业务评定标准非常复杂,因为影响结果的因素很多。
阅读全文
摘要:常规分布式架构系统来说,划分出十来个独立的微服务模块是很常见的,然后不同的开发人员分工几个服务块,负责日常开发和维护,微服务之间会出现版本差异也是自然的。例如用户服务需要开发版本为7.0,其他服务可能高于这个版本或者低于这个版本,所以对服务发布这块做持续集成就很有必要。
阅读全文
摘要:微服务下通过实现RequestInterceptor接口,管理服务之间的Feign请求拦截器,在请求路由到服务前,可以对请求执行一些处理操作,常见操作例如传递版本号,用户Token等请求头等属性。
阅读全文