架构设计文章读后感3

欢迎关注个人博客喜欢二福的沧月君的个人博客 所读文章均来自www.infoq.cn

支付场景微服务改造性能优化,程超,阅读数,,近年来微服务架构成为分布式架构技术公司转型微服务架构,。
微服务框架使用主题微服务生态进行系统性讲解结合工作大量实战案例读者读完手应用,支付场景介绍,介绍支付场景微服务实践微服务体现真谛理解业务深入理解业务才能结合领域定义微服务介绍互联网支付,互联网支付使用场景,。
刷卡支付用户展示微信钱包刷卡条码二维码商户系统扫描完成支付适用线下收银场景超市便利店扫线下,扫码支付商户系统微信支付协议生成支付二维码用户再用微信扫扫完成支付适用pc网站支付实体店单品场景主扫线,公众支付用户微信打开商户h5页面商户h5页面调用微信支付提供jsapi接口调用微信支付模块完成支付适用公众朋友圈聊天微信完成支付场景,wap支付公众基础开发微信浏览器支付方式需要申请支付权限满足微信手机h5页面进行微信支付需求,。
pc手机网页实现下单支付俗称h5支付,app支付商户移动端应用app集成开放sdk调用微信支付模块完成支付,网关支付用户需要开通网上银行完成支付对象银行借记卡信用卡银行系统企业个人提供安全支付服务,支付支付指用户购买商品时需开通网银需提供银行卡卡号户名手机号码信息银行验证手机号码正确性支付发送手机动态口令用户手机号用户输入手机动态口令完成支付,。
支付场景实现微服务最终目标能够单体支付系统业务进行解耦利用微服务生态实施支付系统能够保证系统可靠性并发能力建设运维体系支撑日益微服务系统,支付业务建模服务划分,介绍领域建模相关知识知道关键词领域子域限界上下文,读者领域子域概念理解限界上下文理解关键词做介绍,。
限界上下文理解系统应用服务组件存在领域,举生活例子上班会坐地铁出发单位需要换乘地铁号线号线号线,地铁理解限界上下文号线走到号线过程领域事件到达目的地换乘地铁过程叫作上下文切换,回到支付业务业务领域相关知识划分服务,。
业务架构示例讲解图所示,工作遇到业务场景时需要识别出一共领域领域划分子域具有领域子域限界上下文进行归类,识别出领域需要设计人员业务大量调研深入了解才能识别领域,图看到业务架构图业务核心领域支撑子域,。
重点介绍部分领域领域包括子域,对接业务业务系统对接支付系统包括电商业务互金业务一键支付限界上下文,统一接入网关层功能请求入口进行加解密分流限流准入控制,图,。
产品服务,收银台包括限界上下文pc收银台手机手银台,商户包括限界上下文分账鉴权担保代扣,个人包括限界上下文充值提现,。
业务服务包括限界上下文交易服务支付服务退款服务计费服务风控服务,基础服务,网关包括限界上下文支付网关鉴权支付路由,资金处理平台包括限界上下文对账清结算备付金会计,。
支付场景服务架构详解分析,使用微服务核心业务没有业务进行支撑微服务业务微服务相结合思想没有微服务架构体系无法服务落地重点介绍做好微服务需要完善技术架构,实际工作案例出发点分析中小公司落地微服务,图所示部分微服务业务架构部分微服务基础技术架构,。
图,业务架构分析,介绍业务划分领域看到业务架构部分完成领域划分重点服务,服务核心域包含子域子域功能进行划分支付中心子域包括支付服务路由系统银行渠道限界上下文限界上下文服务系统,。
结合康威定律综合考量团队规模公司创业初期研发人员支付中心子域定义限界上下文包括独立模块支付服务模块路由模块银行渠道模块人员增加规模项目组修改支付中心限界上下文会导致影响需要支付中心上升业务领域独立模块拆分为独立系统项目组维护部署图所示,图,看出未拆分结构交易服务想要调用支付模块统一调用支付系统才能调用支付模块拆分结构交易服务调用支付服务系统路由系统银行渠道系统任意业务流来讲肯定调用支付服务系统,数据业务进行数据库拆分拆分原则应用拆分图所示,。
图,看到业务应用数据库三者一体物理业务隔离应用服务数据库不能访问只能服务调用进行访问,技术平台详解,支付业务微服务理念做合理划分业务架构各层次起来微服务架构建设业务划分技术平台和运维体系支撑图部分分为统一平台业务微服务基础中间件自动化运维层,。
统一业务平台,通用平台业务系统包括数据分析服务商户运营服务运维管控服务进件报备服务无法业务归类业务系统只能支撑域存在放到统一业务平台供业务线使用,微服务基础中间件,微服务生态支撑微服务体系基础中间件进行辅助才能使微服务运行,。
笔者积累实践经验图组件进行技术选型方面介绍图组件章节进行介绍做说明,微服务框架,目前市面上流行springbootspringcloud微服务框架框架微服务集大成者涵盖范围广支持动态扩展插件,公司管理者不能出技术公司核心业务技术进行更替生产上所带来风险会,。
合理做法公司部门成立没有做技术框架选型想公司推广微服务尝试使用springbootspringcloud框架节省出公司部门时间攻关业务需要精力放在进行微服务建设上来,目前互联网公司生产过程使用微服务框架springbootspringcloud会使用dubbogrpcthriftrpc框架进行服务治理公司研发出微服务组件apm监控系统分库分表组件统一配置中心统一任务,情况公司自建比较完善基础架构平台没整体更换springbootspringcloud代价会公司业务造成后果,公司发展策略客户用户优先公司技术需要尝试公司边缘业务使用达到认可逐步推广循环渐进,。
笔者进行微服务改造过程原有dubbo做改进duboospringboot相结合形成服务治理框架,消息服务,谈技术选型不能脱离业务空谈选型消息中间件优点场景择优选择笔者结合使用类型mq说选型使用场景,rabbitmq使用erlang编写开源消息队列支持协议amqpxmppsmtpstomp正是如此使变得适合企业级开发,。
rabbitmqamqp协议领先实现实现代理broker架构意味着消息发送到客户端中央节点排队,路由routing负载loadbalance数据化支持,集群使用分区配置会脑裂现象出现支付行业rabbitmq,kafkalinkedin开发开源分布式mq系统现在apache孵化项目高性能跨语言分布式publishsubscribe消息队列系统性能效率行业领先版本大量测试主备partition信息机制问题会造成数据丢失问题应用场景大数据监控领域,。
目前市面上支付公司使用rabbitmq消息中间件具有支付行业丢消息mq特点,缺点activemq使用java实现定制化想知道消息队列剩余消息没有消费通道获取消息共有条是否手动自动触发重试监控统计信息目前做完善只能满足基本功能要求,接下来说消息队列技术领域使用场景,做延迟设计,。
数据需要使用需要使用延迟队列设计rabbitmq利用死信队列实现,处理,应用多任务执行场景,应用解耦,。
微服务架构无状态服务考虑使用mq做消息通知转换,分布式事务一致性,使用消息中间件队列做分布式事务消息补偿实现一致性,流量削峰,。
秒杀团抢活动使用队列控制秒杀人数商品缓解短时间压垮应用系统问题,日志处理,做监控日志采集队列做消息传输暂存,统一配置中心,。
目前市面开源统一配置中心组件可供使用携程开源apollodiamond百度disconf组件各有特点使用过程需要实际情况综合考量,笔者公司目前采用微服务架构springbootdubbo方式apollo架构使用springbootspringcloud方式架构方式无缝对接apollo解决同城双活方面问题角度适合目前场景,银行通道监控切换,银行提供业务产品b2cb2b大额支付银企直代收代付支付产品服务无统一接口使用产品服务支付机构只能一家家银行进行接入对接银行通道过多时通道稳定性支付工作重中之重涉及用户支付是否关键支付机构支付成功率指标针对性进行银行通道稳定性监控故障切换系统建设图所示,。
图,图通道监控切换系统整体架构相应组件应用增加agent监控代理拦截通道请求情况collector进行数据汇总通道评分数据发送给redis集群支付路由系统进行通道选取会redis集群获取通道评分通道相应配置项进行综合评定选取通道采集监控数据会存放influxdbgrafana进行预警展示通道不可用则自动通道关闭通知研发部门进行问题排查,代码层面提升微服务架构性能,架构变迁演进方面文章架构方面介绍代码级别性能优化介绍好比盖楼楼房基础架子搭盖房工人不够专业需要注意地方往里面添砖加瓦出问题后果房子漏雨裂缝问题出现楼房塌陷楼房变成危楼,。
判断项目是否具有设计需要代码可用架构方面衡量图所示,图,代码看程序结构是否合理程序是否存在性能问题依赖组件是否使用,可用架构看项目可用性扩展能够支持并发能力,。
说项目设计部分组成缺一不可,代码设计角度看,实战过程公司研发项目场景支付场景出发点代码设计角度总结问题,数据库发生死锁现象,。
mysql数据库例select,update语句手工加锁锁语句行级锁,情况使用select语句不会数据库数据加锁使用update语句程序层面实现数据加锁保护update语句使用不当非常容易造成数据库死锁现象发生表所示,表,。
事例会话会抛出死锁死锁原因会话等待出现问题项目大量事务update语句使用不当造成,mysql数据库锁基本锁,recordlock记录锁,gaplock间隙锁锁定范围包括记录,。
gaplockrecordlockkeylock锁定范围锁定记录,update语句gaplockkeylock锁相混合使用没有注意用法非常容易出现死锁情况,数据库事务占用时间过长,看伪代码,。
复制代码,publicvoidtest,transaction事务开启,,。
daoinsert插入记录,httpclientqueryremoteresult请求访问,daoupdate记录,transactioncommit事务提交,。
catchexception,transactionrollfor事务回滚,,,。
项目类似程序类似httpclient可能造成长时间操作混事务代码会造成事务执行时间超长会降低并发能力,使用事务遵循原则出事务代码,伪代码httpclient拆分出来避免事务性代码混,滥用线程池造成堆栈溢出,。
javaexecutors提供线程可供使用,newcachedthreadpool创建缓存线程池线程池会实际需要创建线程空闲线程空闲线程会利用,newfixedthreadpool创建定长线程池控制线程并发数超出线程会队列等待,newscheduledthreadpool创建定长线程池支持周期性任务执行,。
newsinglethreadexecutor创建化线程池会工作线程执行任务保证任务指定顺序fifolifo执行,jdk提供线程池功能上替做封装节省参数设置过程,使用不当造成堆栈溢出情况示例代码如下所示,复制代码,。
privatestaticfinalexecutorserviceexecutorserviceexecutorsnewcachedthreadpool,,执行任务,paramtask,。
,publicstaticvoidasynshorttaskrunnabletask,executorservicesubmittask,taskrun,。
,commonutilsasynshorttasknewrunnable,override,publicvoidrun,。
stringsmssrgetsmscontent,smssmsreplaceallfinalcodeaesencrypttobase64finalcodeconstantutilsgetdbaeskey,srsetsmscontentsms,smsmanageserviceaddsmsrecordsr,。
,,代码场景请求过来会创建线程dump日志导出进行分析发现项目启动线程线程显示状态资源耗尽,查看代码会发现代码使用线程池使用代码申请,。
复制代码,privatestaticfinalexecutorserviceexecutorserviceexecutorsnewcachedthreadpool,并发情况无限制申请线程资源会造成性能下降采用方式产生线程,答案integer最大值,。
查看如下源码,复制代码,publicstaticexecutorservicenewcachedthreadpool,returnnewthreadpoolexecutorintegermax,。
timeunitseconds,newsynchronousqueuerunnable,,使用newcachedthreadpool可能带来栈溢出性能下降使用newfixedthreadpool设置长度是不是解决问题,。
使用方式代码所示设置线程,复制代码,privatestaticfinalexecutorserviceexecutorserviceexecutorsnewfixedthreadpool,修改完成并发量上升tps并发量项目gc垃圾回收能力下降分析原因executorsnewfixedthreadpool解决产生无限线程问题采用newfixedthreadpool方式会造成大量对象堆积队列无法消费源码如下,。
复制代码,publicstaticexecutorservicenewfixedthreadpoolintnthreadsthreadfactorythreadfactory,returnnewthreadpoolexecutornthreadsnthreads,timeunitmilliseconds,。
newlinkedblockingqueuerunnable,threadfactory,,看到采用无界队列也就是说队列无限存放执行线程造成大量对象无法释放回收,。
jdk提供原生线程池threadpoolexecutor线程池基本上控制权力交给使用者使用者设置线程任务队列拒绝策略线程空闲时间使用线程池建立精准把握前提才能使用,配置信息数据库读取,业务场景项目项目会遇到问题项目配置信息项目properties文件存放配置信息存放数据库造成问题,使用properties文件修改文件需要环境修改服务器数量情况非常容易出错修改错会造成生产事故,。
采集数据库统一存放配置信息并发量情况请求读取数据库配置会造成大量操作会数据库造成压力项目会产生性能影响,合理解决方案使用统一配置中心利用缓存配置信息进行统一管理实现方案参考深入分布式缓存,库查询数据全部取出,代码会看到如下sql语句,。
复制代码,selectorderstatusinit,sql语法看不出问题放在环境会产生效果数据库状态init数据条条sql会查询出来返回调用端情况项目没有影响,数据库状态init数据条sql语句执行记录全部返回调用端做会数据库查询造成压力会调用内存造成影响带来用户体验,。
合理解决方案使用limit关键字控制返回记录数量,业务代码研发考虑幂操作,幂用户操作发起请求请求产生不会点击产生,支付场景例用户购物选择完商品进行支付网络原因银行卡钱扣网站支付系统返回支付失败用户订单发起支付请求会进行扣款返回用户查询余额返发现扣钱流水记录变成场景幂,。
实际工作幂订单进行防重防重措施记录加锁方式进行,问题没有使用锁方式进行防重数据库造成压力项目扩展性扩展瓶颈采用方法解决问题,使用组件做控制zookeeperredis实现分布式锁,使用主键防重法方法入口处使用防重表能够拦截订单插入时数据库会报错程序返回,。
使用版本号version机制防重,注意方式设置过期时间锁定资源能够释放资源竞争,使用缓存不合理存在惊效应缓存穿透情况,缓存穿透,。
项目使用缓存检查缓存数据是否存在存在返回缓存内容存在查询数据库进行缓存查询返回,查询数据缓存存在会造成请求查询db缓存失去意义流量可能db挂掉缓存穿透图所示,图,黑客利用存在缓存key攻击应用会数据库造成压力会影响线业务进行,。
做法存在key预先设定值keynull,返回null值应用认为存在key应用决定继续等待访问放弃操作,继续等待访问时间轮询请求key取到值null认为key有值避免透传到数据库大量类似请求挡在缓存,缓存并发,。
看完缓存穿透方案可能会读者提出疑问使用缓存缓存没有需要数据处理,场景客户端缓存key读取数据读到数据流程结束没有读数据可能会并发没有读数据使用缓存系统setnx方法设置值方法类似加锁没有设置请求sleep一段时间设置请求读取数据库获取值获取缓存流程结束sleep请求唤醒缓存读取数据流程结束图所示,图,流程漏洞数据库没有需要数据处理,。
处理请求会造成死循环缓存数据库查询结合缓存穿透思路请求null进行处理直到后台系统数据库插入数据null数据缓存,缓存过期导致惊效应,使用缓存组件会使用缓存过期功能释放使用频率缓存节省出缓存空间,缓存设置过期时间会导致一段时间内生成大量缓存一段时间大量缓存大量请求穿透数据库导致端数据库压力陡增缓存过期导致效应,。
合理解决方案缓存key设置过期时间加值避免缓存,一致性,缓存一致性指当后程序数据库数据完成缓存失败后续利用补偿机制缓存进行达到缓存数据数据库数据状态,方法mqbinlog方式,。
mq缓存补偿方案,方案缓存组件出现故障网络出现抖动程序mq补偿缓冲队列重试方式机制缓存图所示,图,说明,。
应用数据库缓存,数据库缓存,数据库失败更新过程失败,判断缓存是否返回,。
缓存没有数据发到mq,应用监控mq通道收到消息继续redis,问题,redis失败数据发到mq应用重启mq没有需要数据redis数据没有设置过期时间在读写少场景只能人工介入缓存,。
binlog方式实现统一缓存方案,方案应用研发人员来讲需要研发人员判断据库redis是否做考虑使用binlog缓存方案能够减轻业务研发人员工作量有利于形成统一技术方案图所示,图,说明,。
应用写数据数据库,数据库binlog日志,利用canal中间件读取binlog日志,canal借助于限流组件频率数据发到mq,。
应用监控mq通道mq数据redis缓存,看到方案研发人员轻量不用关心缓存层面方案实现起来比较复杂形成统一解决方案,问题,方案弊端需要提前约定缓存数据结构使用者采用数据结构存放数据方案无法做成通用方式增加方案复杂度,。
程序打印大量无用日志引起性能问题,伪代码,复制代码,quatadtoquatadtonull,。
,quatadtogetrisklimitpayrequestgetqueryriskinfopayrequestgetmerchantnopayrequestgetindustrycatalogcardbinresdtogetcardtypecardbinresdtogetbankcodebizname,catchexception,loggerinfo获取风控限额,。
,代码发现需要注意,日志打印loggererrorloggerwarn方式打印出来,日志打印格式系统来源错误描述关键信息日志信息打印出能看懂信息前因后果,。
方法入参出参考虑打印出来,输入错误信息exceptiongetmessage方式打印出来,合理日志打印参考如下格式,复制代码,。
loggerwarninnersysexceptiontypedescriptionmethodname,errorcodeerrorcode,errormsgerrormsg,loggerinfoinnersys入参methodname,。
loginfoencryptutilgetlogstringarguments,loggerinfoinnersys返回methodnameloginfoencryptutilgetlogstringresult,程序大量打印日志能够打印有用信息帮助排查问题日志量影响磁盘会造成线程阻塞程序性能造成影响,使用log4j1设置conversionpattern使用如下格式,。
复制代码,,项目进行压测发现大量锁等待图所示,图,。
log4j进行源码分析发现orgapachelog4jspilocationinfo如下代码,复制代码,string,protectmultipleaccesssw,。
synchronizedsw,printstacktracepw,swtostring,swgetbuffersetlength,。
,systemprintln,intibeginiend,看出方法中用synchronized锁打印堆栈获取行号conversionpattern格式修改线程大量阻塞问题解决极大地提高程序并发能力,。
索引优化,组合索引原则偏左原则使用需要加注意,需要添加索引数量添加考虑聚集索引辅助索引性能区别,索引不会包含null值列,。
列中包含null值不会包含索引复合索引含有null值复合索引,设计数据库时字段默认值null,mysql索引排序,mysql查询使用索引子句使用索引order列不会使用索引,。
数据库默认排序符合要求情况使用排序操作,包含列排序需要列创建复合索引,使用索引注意事项,操作符应用索引,。
等于,,,开头,。
操作符不能应用索引,,开头,整体架构角度看,。
采用单体集群部署模式,团队项目发展规模需要业务团队人数进行拆分,使用单体项目做整体部署项目影响加上团队人员达到规模没有办法进行项目维护升级,采用单机房部署方式,。
现在互联网项目稳定性要求采用单机房部署风险性黑客恶意攻击机房断电网线损坏不可预知故障发生时单机房无法提供稳定性保障需要互联网企业建设同城双活活确保机房稳定性,采用nginxhessian方式实现服务化,hessianremotinghttp框架采用binaryrpc协议,易用性特点直到现在企业使用hessian远程通信工具hessian具备微服务特点远程通信工具使用hessian偏重于数据打包传输解包需要借助nginx做服务路由负载重试需要nginx进行配置不能动态服务进行加载卸载业务请求量情况hessian适合微服务服务治理框架需要springclouddubbo,。
项目拆分tomcat共用应用见图,图,注tomcat部署应用war包彼此之间牵制并发量情况性能降低非常明显图所示,图,。
注拆分情况认为项目不会存在情况事实上存在,解决方法应用war部署tomcat应用程序不会存在资源连接数竞争情况性能并发能力提升,无服务降级策略,举例子说明服务降级出门旅游箱子想带东西箱子塞满发现东西没有放只能东西全部出来做对比分类找到要带是非必需箱子放满必需品防止情况再次发生下次旅游提前准备箱子,。
服务降级类似思路资源情况舍弃东西保证事情能够进行下去,服务降级应用场景服务架构整体负载超出预设上限阈值流量预计超过预设阈值时保证服务运行服务延迟使用,支付运营报表数据量查询,回顾微服务数据去中心化核心要点,。
微服务数据库,微服务只能访问数据库不能访问服务数据库,业务场景请求操作数据库服务数据库进行添加删除修改操作,情况建议访问服务数据库调用服务提供接口完成操作,。
数据去中心化降低微服务耦合度,核心要点看到微服务数据描述去中心化也就是说业务属性独立拆分数据库使业务领域数据库关系一一对应,支付业务场景例单体支付项目进行微服务改造业务架构图所示,图,。
看到单体支付项目进行微服务改造增加服务项目服务项目理解限界上下文服务项目对应数据库数据库适应单体支付系统大库拆分成独立数据库,问题后台运营统计噩梦运营报表会跨业务进行统计汇总原有运营系统做报表会运营人员增加工作量需要逐库进行统计进行汇总,凡事两面性微服务带来去中心化高度解耦的会带来报表数据历史数据无法统一汇总查询问题需要服务数据库抽取数据数据平台做数据集中化图所示,图,。
数据平台会服务读库配合使用数据平台存放往往大而全数据,大数据平台理解数据仓库存放数据研发人员数据量业务情况合理利用服务读库减轻查询数据平台压力,用户查询服务订单情况读库进行查询查询订单详细信息充分发挥读库作用,用户查询数据数据量原因历史数据迁移走大数据平台进行查询,。
运维手动打包上线,微服务架构实施需要强有力运维做支撑相当于宝马车表面看上去装发动机,需要devops全公司推广自动化运维和部署成为微服务发动机,微服务架构故障分析技巧,。
开发者自测利器hprof命令,示例程序如下所示,注测试代码sleep方法进行延时,分析程序代码出现延时故障,。
程序加上如下运行参数,运行程序发现工程目录文本文件javahproftxt打开文件内容如下所示,注内容看到方法执行时间耗费cpu时间一目了然定位问题,hprof独立监控工具javaagent工具监控java应用程序运行cpu信息堆内容使用javaagentlibhprof命令查看hprof使用文档,。
例子统计cpu时间统计内存占用dump信息,agentlibhprofheapformatfiletesthprof,junit自测代码结合hprof解决业务bug能够程度解决发现性能问题实用,性能排查工具pidstat,。
示例代码如下所示,示例代码运行起来命令行输入,复制代码,pidstat,。
,代表cpu使用率监控,参数代表采样一共,监控级别细化线程,。
,图所示,图,注tid线程idusr表示用户线程使用率图看到线程cpu占用率,。
命令行输入命令,复制代码,jstacktmptestlogtxt,查看testlogtxt显示如下所示内容,。
注关注日志文件nid字对应说tidnidtid进制表示十进制转换成十六进制日志进行搜索看到如下内容,推断出性能瓶颈问题,内容来自作者图书作品可用伸缩微服务架构dubbospringcloudservicemesh点击购买,作者简介,。
程超网名程故事现任公司架构师超过java研发经验技术管理架构经验熟悉支付电商领域擅长微服务生态建设和运维监控dubbospringcloudgrpc微服务框架深入研究帮助公司进行服务建设改造,作品深入分布式缓存云mvp云栖社区专家codingfly社区特聘技术专家csdn博主专家,梁桂钊现任互联网公司开发工程师参与内容分发k12教育淘系电商项目,目前专注零售电商服务业务摸索电商服务创新实践,。
具有java核心技术微服务分布式并发领域实战经验技术方向开源框架浓厚兴趣,公众服务端思维作者,秦金卫kimmking现任公司技术总监apachedubboppmc架构师商业银行北京研发中心负责人,关注互联网电商金融支付区块领域研发管理架构经验中间件soa微服务开源技术热衷活跃dubbofastjsonmuleactivemq开源社区,。
个人博客httpkimmkinggithubio,方志斌现任联网公司研发工程师,目前专注联网平台架构设计开发工作,微服务分布式集群研究实战经验,。
java领域开源框架兴趣喜欢深入分析总结框架源码,springforall社区核心成员组织社区技术专题问答活动,张逸架构编码实践者微服务架构设计者领域驱动设计布道数据平台架构师,著译作包括软件设计模式恰如其分软件架构人件,。
个人微信公众个人博客httpzhangyixyz,杜琪网名阿杜现任蚂蚁金服研发工程师毕业南开大学计算机系统结构硕士,毕业接触分布式业务系统开发赞负责用户中心基础服务分布式业务系统稳定性可靠性经验,喜欢研究底层技术喜欢研究疑难技术问题jvm内存问题排查gc调优,。
输出分享习惯公众javaadu维护者,殷琦网名涤生现任美团点评技术专家毕业东华大学软件工程硕士,加入美团点评基础架构部接触微服务架构从事服务框架研发工作微服务架构发展演进认识,个人喜欢研究分享技术时刻关注实践微服务架构技术servicemeshserverless,。
posted @ 2019-03-30 00:00  喜欢沧月的二福君  阅读(191)  评论(0编辑  收藏  举报

联系博主qq2456891380