在先前的文章中,对于变更风险观测的流程逻辑设计,有浅谈一小部分。但从宏观来讲,一个变更观测平台,需要对大量的观测任务做统一调度,这样才能把整个观测平台给支撑起来。因此,本文就简单分享一下,变更风险观测的任务调度可能怎样设计。
这个问题可以拆分为几个子问题:多任务并发需要如何处理,任务调度的消息协议需要如何设计,以及怎么去保证整个调度系统的稳定性。
在先前的文章中,对于变更风险观测的流程逻辑设计,有浅谈一小部分。但从宏观来讲,一个变更观测平台,需要对大量的观测任务做统一调度,这样才能把整个观测平台给支撑起来。因此,本文就简单分享一下,变更风险观测的任务调度可能怎样设计。
这个问题可以拆分为几个子问题:多任务并发需要如何处理,任务调度的消息协议需要如何设计,以及怎么去保证整个调度系统的稳定性。
近期因为项目架构升级原因,笔者着手调研一些go项目monorepo的代码架构设计,目标是长期把既有微服务项目重要的部分都转移到monorepo上面,让代码更容易维护,协作开发更加方便。虽然经验不多,但既然有了初步的调研,今天就分享一下笔者所面临场景的monorepo设计思路。
从语言特性上讲,Golang是非常适合做monorepo的,但根据不同项目研发需要,monorepo的目录结构可以定制成不同的形式。所以要做monorepo,首先要回答的问题是,做这个事情主要解决什么研发问题,优化了什么东西,否则投入量过多,ROI就会很低。
从质量管理角度来讲,变更风险防控算是一类重要的方向,从业务的角度来讲,通过运营变更风险数据,可以更好了解变更发布的质量,从而预防线上问题。今天就浅聊一下,变更风险防控的数据运营,需要做好哪些数据基础。
简单来说有以下三个部分:渠道风险、准召拦截、发布效率。
技术人培养产品思维,这一点是技术人在职业成长中不可缺少的一部分。无论是做业务开发,还是做纯粹的基础架构、技术优化,有了产品意识,才能把自己的技术作品打磨地更好,能在更多工作场景派上用场。那么,今天就聊一下作为技术人,有什么方式可以提升产品意识。
把这个问题丢给AI,概括一下答案是几大块:第一块是学习产品知识,比如阅读相关产品设计书籍,参与课程讲座;第二块是深入了解用户需求,培养用户视角;第三块是加强跨部门沟通,和其它团队紧密合作。AI给到了很好的一套思维框架,帮助我们技术人找到一些提升产品意识的路径,但具体怎么做,最终还是要结合咱们自己的经历来。所以今天,就分享一下个人经验。
在线上服务变更过程中,我们希望可以通过一套实时观测机制去监测线上服务的风险,从而能够确保线上稳定性,在出问题时可以及时回滚变更。今天这篇文章,就简单讲一下变更风险观测的流程逻辑需要怎么设计。
首先我们需要建模变更观测的过程。变更观测的生命周期,一般来讲,当服务某阶段变更开始后,观测会开始,然后当服务某阶段变更完,一般还需要停留观察一段时间,确定线上没有遗留风险之后,观测才会结束。可以简单的认为,一次变更观测,关联一次发布的某一个过程。所以一个观测任务,结构数据上需要包含发布工单的元信息、观测参数的元信息,以及任务自己的运转状态,同时每个任务实例需要被有序的调度起来,因此所以要有一个调度系统去处理每个任务实例的状态推进。
然后,再细一个粒度,对于一个特定的变更风险点,我们也需要用一个特定的观测能力去cover,所以对于每个观测能力,也要和上层的观测任务一样,有自己的元信息和状态转换定义。任务对能力是一对多的关系,一个观测任务当中,可以通过某种编排,把不同能力在不同的时间点启动起来,切入到发布过程的不同时机,这样就能够形成灵活的变更观测。
从这些角度出发,以一个简单的串行思维,整个变更观测任务需要做以下的动作:
作为程序员,脑力劳动者,保持一个健康的身体,是非常重要的。回顾24年自己取得的结果,一个比较亮眼的就是减肥减了10kg,到达了一个比较健康的体重,保持了半年没有反弹,当然到现在也依然在保持。今天这篇文章就给大家分享一下自己的减肥和体重保持的经验。
减肥的要领,主要包括以下几点:心态、吃、运动以及休息。
最近一段时间闲来无事,简单研究了一下pyside6,也就是PyQt5的升级版。做这个的目的,也是回顾下桌面开发的基础,兴许未来可能用得上。虽然在日常工作中,可能用到桌面开发的场景比较少,桌面工具的成果也比较难包装,但有一个这样的工具,确实可以解决许多工作效率方面的问题。
在之前笔者也写过几篇pyside6文章,但不是特别系统,比如说:
因此,今天这篇文章就系统分享一下,怎么样用pyside6写一个postman接口调用的小功能,开发并部署出来。作为一个自己写的教学文章,这篇文章会重点提一些自己觉得实操过程中的要点,少一些ChatGPT就能回答的东西。有了这些基础之后,做其他的工具需求,也会变得更加简单一点。
安装方面不再赘述,详情可以看官网的Getting Started以及Tools的部分,然后先前的文章也基本上把目录组织和最小demo给讲清楚了。
核心要解决的问题就是通过目录组织,把工作流的每一个模块给拆出来,互不影响。比如这样:
最近笔者接触到了Cypher这款游戏,玩法很简单,就是通过文字、图片等各种表达手段组成的谜面,猜一段英文,算是初步接触了密码学的一些知识。游戏中提到了很多类型的密码,其中Enigma密码机就是单独一种,在电影《模仿游戏》中,夏洛克.福尔摩斯费尽心力破解的德军密码,也就出自此密码机之手。在游戏里,有一道题目便是,需要根据Enigma密码机的初始设置,破译一段密文,得到明文。没办法,为了解出来这道题,只能发挥程序员的职业本性,写一段程序来跑一下了。
今天,笔者就分享一下自己用python实现的Enigma密码机,虽然代码非常粗糙,有很多优化空间,但整体逻辑比较清晰,尤其是解Cypher游戏里的题目,已经够用了。
简单来讲,一个Engima密码机是分层的,包含以下几个部分:
一个产品随着不断研发,其服务架构的复杂度会越来越高。随着产品的用户体量变大,为了保证产品能够长线运营,就需要保证整个服务架构的稳定性。因此,今天这篇文章,就从实操的角度,粗浅讨论一下,服务架构的稳定性需要如何做到基础保障。
既然是基于实操的角度,那么理论上的东西不会涉及的太深刻。好比说,谈到稳定性,我们就会考虑SLI、SLO、SLA这些基础概念,但这些比较宏观。拿OKR举例子的话,O是SLA,KR是SLO,而SLI则是KR具体的指标定义。所以这篇文章主要讲如何保证SLI以及其他指标,间接满足SLO、SLA的需要。
在某些python的工具模块开发场景下,我们可能需要根据用户给定的web请求输入,来转化成一个curl的输出,用于一些网络请求测试,或者方便开发之间交流信息。由于python的web请求基本上一万个人里面九成九都用requests,因此今天这篇文章就简单介绍一下,如何在python里面将requests实例转化成curl语句。
这个场景下,我们需要用到一个叫做curlify的工具库来达到效果。curlify提供了一个to_curl函数,可以将一个请求实例转化成curl语句: