自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(139)
  • 收藏
  • 关注

原创 Web前端依赖版本管理最佳实践

本文需要读者懂一点点前端的构建知识:1.package.json文件的作用之一是管理外部依赖;2..npmrc是npm命令默认配置,放在工程根目录。Web前端构建一直都是一个不难,但是非常烦人的问题,在DevOps、CI/CD领域。烦人的是偶尔发生这样的事情:1.开发在本地构建通过,但是流水构建失败。这时前端开发人员会经常报怨Pipeline不稳定;2.流水线构建通过,但是在生产环境上启动...

2024-03-13 07:32:59 1081

原创 在你的心目中,优秀的DevOps工程师应该是什么样的?

这是我最近面试时遇到的一个非常好的问题:在你的心目中,优秀的DevOps工程师应该是什么样的?很长一段时间里,我没有想到这个问题。所以,当HR问起时,我边思考边回答。我已经不记得原话,本文就当作从性格角度思考“优秀的DevOps工程师应该具有什么特质”。首先,优秀的DevOps工程师,TA应该是严谨的。一个严谨的特质的人才会主动考虑软件工程化过程中的各种可能。其次,TA应该对手工操作产生“生理性上...

2024-03-12 08:17:09 225

原创 回滚的两种模式,大多数人只懂一种……

回滚是一种运维操作。通常发生在部署过程中发现问题,需要将目标环境恢复到部署前的状态。在我看来,回滚有两种模式。其中一种是一步步执行反向操作,我称之为反向操作模式。基于反向操作的回滚模式可能是由于过去手工运维的思维方式的惯性,我发现不少人只知道这一种模式。比如使用手工部署Nginx的配置的操作如下:1.SSH登录到目标服务器2.进入到存放Nginx的/etc/nginx/sites-enable...

2024-03-05 13:16:10 1045

原创 程序员想告赢开发商一户一表违约(终审判决)——铁拳迟到会打到每一个人...

二审的结果并没有出乎我的意料:维持原判。所以是我输了这场官司。只是我输得非常不服气。在二审中,我变换思路,以以下思路进行辩论:1.从“正式供电”方向,使用国家国标和法律法规证明小区目前非正式用电,即针对合同中的“正式用电”来上诉;2.采用举证倒置的方法,开发商要拿出证据证明商品房符合验收条件:纳入城市供电网络并正式供电。但是,中院在判决书中根本不提这些。而是认定我们尝试证明“一户一表”等同于“...

2024-02-04 19:29:44 989

原创 如何将DDD应用到基础设施设计?

前段时间在面试的时候,面试官问到:你是如何将DDD(领域驱动设计)应用到基础设施的?我很惊讶,终于有人问我这个问题了。在过去从事基础设施(DevOps、SRE、运维)的5年里,我经常说起DDD是一种思维模式,可以应用到任何的领域,包括基础设施的设计。但是,从来没有人像这位面试官问起我具体的做法。为什么没有人问?原因大概是这两个概念通常是不会放在一起的。大多数开发不会深入理解基础设施的设计,而大多数...

2024-01-27 22:46:15 806

原创 程序员想告赢开发商一户一表违约(二审)——道高一尺,魔高一丈

本文是关于起诉开发商一户一表违约的二审经过。一审请看:程序员想告赢开发商一户一表违约(一审)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍一审开庭前,法官挂断我们的电话一审中,我想到去住建局调取证据——小区内部的电力规划图——用于证明开发商没有按规划图建设。因为事实就是没有按规划图建设。所以,变压器无法移交给供电局。可是,当我们第一次打电话给法官时,法官说:他们没有权力去调取,那是国家机密。然后“...

2024-01-23 09:39:41 868

原创 程序员想告赢开发商一户一表违约(一审)

文章较长,有7000多字,建议先收藏+关注。‍‍‍‍这是一个系列文章,估计有3篇,这是第一篇:我作为原告起诉开发商合同违约,没有实现合同里的“一户一表”的约定。导言正如标题所言,我是一名程序员。2023年5月之前,我是一个法盲,不懂起诉的流程,更不懂开庭的步骤。但在过去的一年中,我以各种身份参与庭审多次,包括:•以被告的公民代理的身份,为被告辩护,参加庭审:1次•以原告的公民代理的身份,为原告...

2024-01-22 21:48:22 795

原创 Bazel使用案例:构建Springboot工程

本文是关于如何使用Bazel搭建Springboot 3.1.0工程(基于JDK17)。为什么使用Bazel,而不是使用Maven或者Gradle?可以看我之前关于Bazel的介绍文章。前期准备在根目录加入.bazelversion文件,并加入6.2.0,指定当前工程使用的Bazel的版本。这样,Bazel命令自动使用该版本的Bazel进行构建。在根目录加入.bazelrc文件,并指定构建和测试时...

2024-01-19 22:51:23 1119

原创 DevOps架构师是如何看待Github Actions的共享制品解决方案的?

前言Github Actions是Github提供的一个CICD Pipeline服务。除了Pipeline,它还提供Secret和简单的配置管理。本文并不是它的一个完整介绍和知识的罗列。而是我在实际使用Github Actions后,对Github Actions的“共享问题”的解决方案的总结。不要小看这个问题,它是所有的Pipeline平台(包括Gitlab CI)都会遇到的问题。只要对这一问...

2024-01-16 18:50:14 877

转载 这是我见过最强的AI大模型教程!可以上车!!

随着AI大热“AI大模型”无疑是最火爆的话题!Google、百度、腾讯等等巨头互联网公司,无不在布局人工智能技术和市场,甚至还有超高年薪,挖掘AI大模型人才!作为普通程序员,如何不被时代抛弃,享受AI技术带来的红利?!????知乎知学堂特发起:行业前沿资源——AI大模型公开课已为本号粉丝开通免费领取权限预计24小时后关闭通道!速进!AI大模型-重塑程序员核心竞争力(不限年龄!不限岗位!IT人都可学习...

2024-01-10 09:00:27 39

原创 Ebean:一款被低估的ORM框架

ORM框架为什么不香?对ORM框架的偏见看了一些MyBaties与Hibernate进行对比的文章。可能是因为一些Hibernate历史原因,国内对于Hibernate普遍存在偏见,我摘抄了几点:1.hibernate是全自动,而mybatis是半自动hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅...

2024-01-02 23:11:24 1163

原创 使用Google OSV工具扫描依赖安全漏洞

安全漏洞是软件工程化能力的试金石2021年年底,Log4j的漏洞陆续被公开。因为该框架被大量的开源软件依赖,所以,漏洞影响面非常大。面对这个漏洞,我们遇到的第一个问题是:如何知道我们哪些工程使用了Log4j?在我看来,这个漏洞是企业软件工程化的一颗非常好的试金石。因为:1.如何第一时间了解到这个漏洞,反应这家企业的安全能力;2.如何第一时间能找到所有使用了Log4j的位置,体现了这家企业第三方...

2023-12-25 16:53:08 494

原创 Bazel作为构建工具之王,将会颠覆你对CI的认知

说到构建工具,不同语言技术栈的人,想起的构建工具不同。Java程序员想到的是Maven,前端程序员想的是NPM或者Webpack、Android程序员想到的是Gradle、Rust程序想到的是Cargo、C++程序员想到的是Make等等。然而这些工具在Bazel面前,层次有些低。所以,我愿称Bazel是构建工具之王。P.S. Android平台的构建,2020年已经开始了迁移到Bazel的工作。 ...

2023-12-07 21:01:00 127

原创 DevOps平台这些功能没有做好,事故发生是迟早

想象这样一个场景:某天K8s集群不知道什么原因挂了,然后DevOps工程师重新部署一套K8s,然后将应用部署到新的集群。当DevOps工程师通过容器平台自动化部署服务X到K8s时,服务X起不来。经查,原因是该node下没有服务X的v30版本Docker镜像,而且远程的制品仓库也没有。再深层次的原因是业务开发人员遵从了“降本增效”的建议,在制品仓库中设置了自动清理3个月自动清理的功能。v30版本在3...

2023-12-07 21:01:00 72

原创 “DevOps团队就应该让开发者只关心业务代码”是对,还是错

在国内,负责提升开发者的效率的团队,通常就是DevOps团队。而这些团队里,经常出现这样的论调:DevOps团队就应该让开发者只关心业务代码。甚至将这个论调作为DevOps团队的目标。这句话是对,还是错,依赖于上下文。我们不在这里讨论对错。但是,这句话可能会导致不好的后果。这个后果,从我过往的经历看来就是:很少有人去关心开发者写代码的效率。比如开发者在本地开发环境下载依赖的速度、在本地编译的速度、...

2023-12-06 07:00:54 74

原创 介绍几个Tarraform资源图可视化工具

由于Terraform使用的是声明式的语言描述最终资源状态,所以,就能低成本的实现资源的状态可视化。以下几种开源工具,能帮助你实现可视化资源。Terraform graph命令graph是Terraform的一个子命令。通过它,你可以生成使用DOT格式的资源图。命令如下:terraformgraph|dot-Tsvg>graph.svg除了在命令行里使用,你还可以将生成dot文件...

2023-12-05 15:16:24 153

原创 听说最近的大事故都是循环依赖导致的?

图片来自网络https://news.seehua.com/post/300444年底了,事故频发。但是都听说是因为循环依赖导致。所以,我决定来写写依赖管理领域中,通常不被重视的循环依赖问题。循环依赖(circular dependencies)的定义来自维基百科的定义:在软件工程中,循环依赖是两个或多个模块之间的关系,这些模块直接或间接地相互依赖才能正常运行。此类模块也称为相互递归。循环依赖是依...

2023-11-30 11:28:05 76

原创 SQL文件管理方式影响研发团队效能和系统稳定性,这里有解决方案了...

高效的管理软件工程中的SQL文件,不仅影响软件研发团队的效能,还影响系统的稳定性。在过往的经历中,SQL文件在团队中通常没有得到很好的管理。以下是我的经验。SQL文件管理是如何影响软件研发团队的效能和系统稳定性的想象一下一名后端开发,当涉及到数据库方面的业务开发时,他的工作流程如下:1. 在本地启动开发环境:打开IDE、启动本地的DB;2. 写业务代码,将业务代码转成SQL文件;3. 手工在本地D...

2023-11-29 11:21:43 76

原创 反思一次效能提升

前天与一个大佬交流。想起自己在6年多前在团队里做的一次小小的效能提升。改进前在同一个产品团队,同时有前端工程师和后端工程师。他们经常需要共同协作完成features。前端是一个传统的多页应用。前端渲染是由后端的velocity模板引擎实现的。打包后,最终执行就是一个jar包:![[hellojar.png]] vm文件后缀名是velocity模板文件。它们内容大概是这样的:<html>...

2023-11-23 10:08:06 533

原创 Meta降本增效大招之:自动删除数据

这是一个系列博客。介绍的是Meta如何通过弃用产品、清理代码、删除数据以实现降本增效。这对于效能平台的建设非常具有指导意义。上一篇介绍的是如何自动清理死代码,本篇介绍如何自动化删除数据。也是本系列的最后一篇。文章最后有原文链接和我个人的总结。懒的同学,可以翻到文章最后。译文:这是我们关于Meta系统代码和资产移除框架(SCARF)系列的第三篇也是最后一篇文章。SCARF 包含多个子系统,可分析整个...

2023-11-18 21:06:24 81

原创 Meta降本增效大招之:自动清理死代码

这是一个系列博客。介绍的是Meta如何通过弃用产品、清理代码、删除数据以实现降本增效。这对于效能平台的建设非常具有指导意义。上一篇介绍的是如何自动弃用产品,本篇介绍的是Meta是如何实现自动清理死代码。请关注我,我会连载这个系列。下一篇将介绍如何自动化删除数据。文章最后有原文链接和我个人的总结。懒的同学,可以翻到文章最后。译文:在我们关于自动弃用产品的最后一篇博客中,我们谈到了弃用产品的复杂性,以...

2023-11-17 12:39:23 78

原创 Meta降本增效大招之:弃用产品

今晚无意间进入去哪儿技术沙龙的直播间,听到他们要删除50%的代码和停掉50%的服务。我就想起Meta公司最近写的这篇博客:Automating product deprecation。这篇博客对于效能平台的建设非常具有指导意义。文章最后有原文链接和我个人的总结。这是一个系列博客。请关注我,我会连载这个系列。译文:在Meta,我们通过构建和交付许多不同的产品不断进行创新和尝试,这些产品包含了成千上万...

2023-11-16 23:10:39 72

原创 不出事故,没有人知道你重要

有同学在知乎上提问:“线上无事故,运维还重要吗?”,描述如下:本人运维行业,本部门在近几年一直保持效率增长且极少出现重大saas生产事故,并且为其他部门输出提升方法以及友好协同提升,但是最近从各层面接到反馈说对运维的投入减少,着实想不通,线上出了事故要运维背锅,产品出了bug要运维陪着到最晚,为什么把线上环境搞得稳定了,却不重视运维岗了?这是原贴:https://www.zhihu.com/que...

2023-11-14 13:43:53 30

原创 DevOps平台两种实现模式

我们需要一个DevOps平台要讨论DevOps平台的实现模式,似乎就必须讨论它们的概念定义。然而,当大家要讨论它们的定义时,就像在讨论薛定谔的猫。A公司认为它不过是自动化执行Shell脚本的平台,有些人认为它是一场运动,另一些人认为它是一种文化,还有CTO认为它的本质就是流水线(Pipeline)。显然不论哪种定义,你无法挑出毛病,但是它们又都无法使所有人都信服。所以,我总是避免谈DevOps的定...

2023-11-10 20:19:50 653

原创 精准测试不过是增量构建的副产品

前文中,我们给了“精准测试”定义:它是一种能力,能只针对变更进行测试,而不是每次变更都进行全量测试。同时,介绍了当前行业里的主流实现方法。个人并不看好该实现方法。本文介绍的另一种实现精准测试的方法。在真正介绍前,我们就必须先说增量构建和Bazel。全量构建与增量构建在软件构建领域,存在两种构建类型:全量构建和增量构建。•全量构建指的是针对代码仓库中所有的代码进行构建;•增量构建是指只针对有变动...

2023-11-03 07:01:41 48

原创 精准测试是个错误

如果你已经了解了精准测试在行业的主流做法,你可以跳过相关内容。行业里对于精准测试的定义在网上流传着一些精准测试的定义(如果你对这些定义不感冒,可直接跳到我个人的定义):自网易陈逸青(2020)的定义:借助一定的技术手段、通过辅助算法对传统软件测试过程进行可视化、分析及优化的过程,使得测试过程更加可视化、智能、可信和精准。原文:https://www.infoq.cn/article/xuu91cr...

2023-11-02 16:40:28 75

原创 大力出奇迹,成本降低80%

谁会想到呢?著名的Basecamp产品将内存缓存改成使用DB作为缓存媒介后,缓存的读取速度慢了约40%。比如从Redis读取缓存内容时,只需要 1 ms,改成从DB读取后,读取速度变成1.4 ms。谁会想到,这让缓存的成本降低了80%,并且缓存使用的空间还是原来的6倍的情况下。为什么呢?Basecamp严重依赖fragment caching技术,即将HTML片段直接存储在缓存中。这意味着他们...

2023-11-01 10:49:35 47

原创 我是如何进行日志降本的

最近行业里流行降本增效。本文就一个现实中经常发生的日志成本的案例进行讨论,讨论该如何降本。背景假如存在一家IoT公司,它拥有1亿的在线设备(长连接着云端)。这些设备每21秒会向云端发送心跳,以进行连接的保活。假如1次连接的保活,在云端产生1条日志,那么1台设备1天产生的日志量是:24 * 60 * 60 / 21 = 4114条,假设1条日志100字节,所以:• 1台设备1天保活日志数:24 * ...

2023-10-31 22:35:27 64

原创 Shell/Bash能力对于运维很重要吗?

Bash能力对于一个运维重要吗?这个问题本身该不该问?我觉得是有必要地思考的。这关乎团队的能力建设。对于这个问题的答案,我的答案是看情况。先说一个现实中真实发生的案例。多年前,某部门所维护的系统经常出现一些“异常”的流量。部长让架构师对20多台机器上的系统日志进行分析,以确认是否真的有“异常IP”在做坏事。这下可难倒这位架构师了,三天时间没有搞定这个需求。最后,过了没有多久,这位架构师就被毕业了。...

2023-10-29 21:00:38 44

原创 SRE/DevOps不得不懂的:Prometheus的配置工程化!

原创不易,还请关注和转发~谢谢背景Prometheus有两个最基本的组件:一个是Prometheus程序,一个是Alertmanager程序。它们的职责分工很明确:• Prometheus程序负责:定时拉取监控指标数据、存储指标数据、根据告警规则发起告警通知;• Alertmanager程序负责:负责告警通知的路由,即当接收到Prometheus程序的通知后,该将通知以何种方式通知给谁。Prome...

2023-05-11 21:00:52 622

原创 基于Bazel + SQLFluff实现SQL lint

背景SQL进行版本化控制后,我们希望为SQL加入lint步骤。这样做的好处是我们可以在真正执行SQL前发现问题。本文中,我们通过Bazel执行SQLFluff[1]以实现SQL的lint。SQLFluff是一款使用Python语言使用的,支持SQL多方言的SQL lint工具。它的特点是:1. 支持多方言。如:Snowflake、PostgreSQL、ClickHouse。所有支持的方言列表:ht...

2023-04-17 17:40:45 123294

原创 Implement SQL Lint with Bazel and SQLFluff

BackgroundAfter SQL version control, SQL lint step in CI/CD pipeline is required. The benefit of it is that we are able to find out the issues from SQL before we execute it.In this blog, we'll combine...

2023-04-17 17:40:45 404

原创 How to Build Sass by Using Bazel

[[sass]] [[Bazel]]P.S. I assume that you know what is Bazel. This blog is based on Bazel 4.2.2.In web frontend area, CSS(Cascading Style Sheet) is the only style language that web browser know. CSS la...

2023-04-11 14:30:25 454

原创 使用Bazel构建前端Sass

注:本文假设对Bazel有一定的了解。本文基于Bazel 4.2.2 版本在web前端领域,前端样式,web浏览器只认CSS样式语言。而CSS样式语言又过于低级。于是有人发明了更高级的语言:Sass[1],用于生成CSS代码。这样的方案,称为:“CSS预处理器”。除了使用Sass实现,还可以使用LESS实现等。本文介绍是如何使用Bazel将Sass文件编译成CSS文件。为什么使用Bazel编译Sa...

2023-04-11 14:30:25 484

原创 基于OpenTelemetry实现可观测性-Part 6 生态

泽注:这是一个系列,共分成6部分,这是第6部分。翻译自:https://trstringer.com/otel-part6-ecosystem/之前的五篇博客涵盖了如何使用OpenTelemetry观测你的应用程序的技术细节。我认为用OTel生态系统的一些信息来结束这个博文系列会产生很大的价值。OpenTelemetry社区发生了很多事情,那些刚接触它的人可能会有点不知所措,或者对在哪里找到某些东...

2023-04-04 11:50:03 312

原创 基于OpenTelemetry实现可观测性-Part 5 传播与Baggage

泽注:这是一个系列,共分成6部分,这是第5部分。翻译自:https://trstringer.com/otel-part5-propagation/我们开发的应用程序各式各样的,有些是单体的,有些是微服务的。单体应用添加遥测相当容易,因为所有的数据都在同一进程中。但是,微服务就有挑战了。很多时候,它只是连接分布式应用之间不同服务的网络。即使这样,这个挑战也无法阻止我们建立有效的链路追踪,如下图:传...

2023-04-04 11:50:03 419

原创 探讨基础设施即代码所带来的挑战

原文地址:https://lukeshaughnessy.medium.com/infrastructure-as-code-is-not-the-answer-cfaf4882dcba以下是译文当然,你听过销售宣传。如果你在 DevOps、平台或 SRE 领域工作,那么你可能已经自己推销过它。基础设施即代码(Infrastructure as Code)!其好处多种多样且不言自明:•它是可复制...

2023-03-28 07:46:57 156

原创 基于OpenTelemetry实现可观测性-Part 4 Collector

译注:这是一个系列,共分成6部分,这是第4部分。翻译自:https://trstringer.com/otel-part4-collector/在上一篇博文中,我们讨论了如何使用 SDK 和追踪器提供者从进程获取遥测数据。存在很多不同类型的导出器,但是典型的导出目的地是OpenTelemetry Collector[1]。这篇文章将深入探讨收集器以及如何使用它。OTel Collector 与其它...

2023-03-27 15:01:46 643

原创 基于OpenTelemetry实现可观测性-Part 3 导出器

在上一篇博客中,我谈到了如何用OpenTelemetry收集遥测数据,基于使用特定语言的API。这包括手工探测和自动探测。这很好!......但收集遥测数据只是解决方案的一部分。你需要把这些遥测数据传送到某个地方,并给它添加一些元数据。这就是SDK开始发挥作用的地方。追踪器提供者(Tracer provider)SDK中关键部分就是追踪器提供者。追踪器负责将从API中得到的遥测数据与剩下的环节进行...

2023-03-26 21:01:11 427

原创 基于OpenTelemetry建设可观测性 Part 2 探测

泽注:这是一个系列,共分成6部分,这是第2部分。翻译自:https://trstringer.com/otel-part2-instrumentation/这是整个系列博客的第二部分。在上一部分,我们介绍了OpenTelemetry是由什么组成的。本文将更准确的讨论OTel是如何收集遥测数据并追踪数据的。手工探测(Manual instrumentation)当我们讨论“探测”,我们实际在讨论收集...

2023-03-25 15:00:58 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除