如今这个年代,提到弹力设计、高可用、稳定性、容灾容错、业务连续性这些。生产环境已经有大量业务流量在跑的服务,重构这种解决方式,肯定会被大局观的上级拍死在沙滩上。那还有什么可做的呢?今天就来聊一聊。三大纪律第一,流程规范第二,刨根问底第三,定期梳理流程规范曾经有一个业界影响很大的事故,原因是一个程序员小哥哥自认为做了一个没有风险的优化,没有和其他人沟通就上线了。他是周一上线的,问题到了周五才引起...
2022-09-29 11:37:08 5354浏览 0点赞 0回复 0收藏
从前,有一个简单的通道系统叫尤娜……转眼离上次尤娜系统削峰填谷的改造已经过去4个月了。小B又来找尤娜,说她还有几个客户想对接B系统,尤娜系统对接的不错,所以希望这些客户都直接对接尤娜,小B会给利润分成。这是件双方都受益的好事,尤娜一口答应了。未来需求预测尤娜请我喝咖啡,我们一起聊到尤娜系统未来可能的业务。尤娜说她还有几个朋友,也苦于和各个公司开展业务,对接成本高。尤娜出马一定可以说服他们用尤娜作为...
2022-09-29 11:36:55 5227浏览 0点赞 0回复 0收藏
回忆起大学,记忆最深的就是那些学不明白的专业课了。其实我认为专业自己学不明白的根本原因是:老师也不明白。现在信息比我上大学的时候丰富了许多,该抽点时间弥补一下大学时的缺憾。今天咱们就来聊一聊我大学时没有上过的这个专业的必修课《软件工程导论》。为什么我大学时为什么没有上过这个课呢。我竟然在学习这个课的过程中找到了答案。什么是软件软件定义1983年IEEE提出了软件的定义:计算机程序、文档、运行程序必需的...
2022-09-29 11:36:28 4828浏览 0点赞 0回复 0收藏
微服务架构并无标准架构,不然什么架构师大会也不会各个系统架构百花齐放了。虽然没有固定的套路,却有一些经验,今天就来做一个总结。基于角色拆分这种拆分方式常见于基础设施以及其PaaS层的架构,比如服务治理、k8s、kafka。所谓基础组件的PaaS层是说,基础设施本身主要作为基础设施使用,是IaaS层。但是基础设施本身需要维护功能,需要增删改查等运维操作。业界基于开源做的二次开发也着重在做这方面的工作。下面以kafka做说...
2022-09-29 11:33:55 6407浏览 0点赞 0回复 0收藏
在《温故知新什么是软件工程》中,我发起了一个投票:word、excel基于软件功能的划分来看属于什么软件?从结果来看,77%的朋友选择了【应用软件个人计算机软件】。这个选项在大学考试时选它一定没错。但是剩下选【支撑软件】的朋友并不意味着选择了一个错误的答案。软件程序+文档+数据。支撑软件是协助软件开发的工具性软件。开发文档用word、excel有什么不行吗?软件生存周期软件生存周期也叫软件生命周期。是软件的产生直到报...
2022-09-29 11:17:09 4981浏览 0点赞 0回复 0收藏
在《深入理解Java类加载机制,再也不用死记硬背了》这篇文章中提到,从JVM的角度看,加载的读取二进制流和初始化阶段,是开放了主导权给用户的。而剩下的所有部分都是JVM内部完成的。那为什么要这样做呢?这是符合面向对象中的开闭原则和封装思想的设计。JVM将类加载内部复杂的实现封装了起来,拒绝开发者修改。只提供了一个拓展接口,用于二进制流的读取。流程上搞懂了,那JVM是怎样使用代码来实现这些步骤的呢?这就要聊到Jav...
2022-09-29 11:16:25 4544浏览 0点赞 0回复 0收藏
应用架构的演变讲的文章很多了,但是我看这些文章,包括我自己之前写的两篇文章《美团分布式服务通信框架及服务治理系统OCTO》和《服务治理的技术血脉》,其实没有把概念讲得特别清楚。感觉乍一看是这么回事,仔细一想满脸问号。Dubbo官网上有一个架构演进的介绍。并附有下面这张图。内容参考地址:https:dubbo.apache.orgzhdocsv2.7userprefacebackground这段介绍代表了整个业界应用演进的大致方向,但不够全面,侧重...
2022-09-29 11:12:56 5009浏览 0点赞 0回复 0收藏
写出结构优雅代码就像成为武林高手一样,需要积累思考勤学苦练。冰冻三尺非一日之寒。成熟的业界套路肯定是没有的,因为代码也有思想流派。现在是百家齐放的时代。codereview时,一个不留神就会吵起来。我在网上找了一下资料基本都是《代码整洁之道》、《重构:改善既有代码的设计》和《代码之美》这三本书里的内容。建议还是自己看书。可以在【编程一生】公众号里回复:666获取我的经典电子藏书,这三本书都在里面。下面有一些...
2022-09-29 11:10:09 6171浏览 0点赞 0回复 0收藏
在《服务治理篇应用架构的演变》中提到在分布式服务架构中,用于提高业务复用及整合的分布式服务框架(RPC)是关键。Dubbo是其中的典型代表。今天咱们就来手撕Dubbo源码,来达到彻底了解其本质的目的。Dubbo怎样实现远程过程通信手撕代码之前咱们来做一个宏观上的认知。上面是Dubbo的部署架构。注册中心、配置中心、元数据中心这三大中心化组件的各自的职责、工作方式如下:●注册中心。协调Consumer与Provider之间的地址注册与发...
2022-09-28 11:34:51 5592浏览 0点赞 0回复 0收藏
TiDB是什么?TiDB是一个分布式NewSQL数据库。它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性,是一个不仅适合OLTP场景还适适合OLAP场景的混合数据库。个人使用TiDB时,从开发角度看,确实只需要换个数据源IP,就可以做到从mysql到TiDB的无缝迁移,这点确实很爽。但是它不是mysql,很多功能不支持,比如:存储过程、视图、触发器、自定义函数、外键约束、全文索引、空间索引和非UTF8...
2022-09-28 11:34:35 4202浏览 0点赞 0回复 0收藏
前情回顾从前,有一个简单的通道系统叫尤娜……尤娜系统的第一次飞行中换引擎的架构垂直拆分改造四种常用的微服务架构拆分方式尤娜,我去面试了正文我回到日常的尤娜系统建设中,最近事情比较少,总有一种迷茫感,不知道下一步要做什么。晚上做梦,经常梦到自己独自一人,身处迷雾当中找不到方向。我跟尤娜诉说了自己的迷茫,干练的尤娜立即帮我预约了一个参加技术沙龙的名额,让我去听听别人公司在做什么。在这之前,我启动程...
2022-09-28 11:34:18 4654浏览 0点赞 0回复 0收藏
背景在openjdk官网有一些废弃方法的解释:https:cr.openjdk.java.netirisse9latestSpecapideprecatedlist.html今天介绍用的较多的2种。解决大家被要求做代码坏味道整改时不知所以然的问题。Class.newInstance()方法被弃用类的实例化有以下6种方式:用new语句创建对象,这是最常见的创建对象的方法。1.使用Class静态方法Class.forName方法2.使用.loadClass()方法3.使用newInstance方法运用反射手段,调用java.lang.Clas...
2022-09-28 11:32:45 3845浏览 0点赞 0回复 0收藏
事情要从周五晚上说起,好学的朋友在群里问我有没有能够通过框架和项目能对IO有深入学习的。我当时正照例刷着电影解说,感受着逻辑的力量。等看到消息时,已经看到其他朋友热心得给出了神回复:在我进行了仔细阅读之后,断线一秒钟,之后由衷感叹自己技术不精,没有弄懂问题和回答之间的逻辑关系。于是给出了自己的回复:通信框架都需要IO知识,服务治理框架、redis和mysql等存储中间件、MQ都有很强的关联。但是一般很少有很强...
2022-09-28 11:31:29 4180浏览 0点赞 0回复 0收藏
DevOps与CICD的关系DevOps就是开发(Development)、测试(QA)、运维(Operations)这三个领域的合并。虽然名字中没有体现,但是DevOps仍包括测试。DevOps是一种方法论,是一组过程、方法与系统的统称,用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运营之间的壁垒和鸿沟。其本质就是人员一体化。大家经常见到的对DevOps的说明是下面这张图:这张图的本质是说DevOps是涵盖各个阶...
2022-09-28 11:29:58 5628浏览 0点赞 0回复 0收藏
神技一:高级搜索有过这样的经验:想搜索一个差不多的项目改改自己用,结果搜索框输入后出来一堆,无从下手。遇到这种情况我都是闭上眼睛,先自己想好怎样从中选择,最终我想到自己想要的是日期比较新、最好是团队而不是个人维护(持续性会好一些)、语言和框架和自己的技术更贴合。大佬们通常会根据想好的要求输入一串神秘代码,比如上图。直接定位想要的结果。其实这是利用了GitHub的高级搜索功能提供的搜索限定符。其实完全不...
2022-09-28 11:29:46 3241浏览 0点赞 0回复 0收藏
善用本地缓存7年前见过一个别人做的项目:因为公司的视频和专辑这些媒体资讯信息属于基础数据,非常重要。有个基础服务专门将这些基础数据提供给全公司使用。这些数据都是从后台信息中录入的,全量数据数据库中有存储,并全量存到了集中式缓存中。全量数据大概不到500M。但是存在一些大专辑,就是说有的数据一条就占几M。所以在查询时,特别是请求多的时候遇到很多超时现象。毕竟像redis等集中式缓存都不建议缓存大数据。但是我...
2022-09-28 11:29:30 4584浏览 0点赞 0回复 0收藏
当别人主动找你沟通当别人找你说一件事情,需要你帮忙的时候。要确保问清楚以下信息:1、事件背景是什么?2、遇到的问题是什么?3、都涉及哪些团队或哪些人?4、有什么风险?当方案没有取得共识当两个人方案不一致时,自己提出了方案A,领导提出方案B。A和B都有一定的问题,是一道取舍题。这时候与其讨论取谁舍谁,不如这么回答:我再回去想想有没有更好的方案。如果自己是领导,《神盾局特工》里科尔森的思路可以做一个很好的...
2022-09-28 11:29:15 5074浏览 0点赞 0回复 0收藏
引子很多工程师习惯于使用一个组件时,参数设置依赖于默认值。或者有时候希望依赖数据分析获取到更合适的值,最终发现考虑的数据过于片面或者数据难以收集最终还是拍脑袋决定了参数的大小。今天咱们就以数据库连接数参数为例说明怎么去设计参数。前提知识先说明一下数据库连接数大小是什么概念。数据库连接数一般指数据库连接池。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而...
2022-09-28 11:29:02 6446浏览 0点赞 0回复 1收藏
为什么过去的方案被否定了?不确定性如果方案中引入了一些不确定因素,比如不成熟的组件,会增加整个产品的不确定性。这种成熟度需要自己把握好,一些大公司,公司明确要求主推的组件一般是经过长期验证的,或者确实有些失败的案例,但是白纸黑字证明了是政治任务,不用不行。这样,使用了一般短时间不会再次更换或者很快公司将不再能称为是大公司。但是小公司的情况会复杂些,对于一些稳定性要求高的系统,引入组件时要判断好...
2022-09-28 11:28:49 5248浏览 0点赞 0回复 0收藏
内存泄露科普内存泄露概念内存泄露(MemoryLeak)是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况。内存泄露影响内存浪费,从而影响程序运行速度,严重时导致内存溢出错误。内存泄露分类1、常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。2、偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和...
2022-09-28 11:27:27 5551浏览 0点赞 0回复 0收藏