自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴就业

吴就业,《实战Alibaba Sentinel》图书作者,现荔枝集团基础架构高级研发工程师,目前在中间件、云原生领域搬砖。

  • 博客(186)
  • 资源 (1)
  • 收藏
  • 关注

原创 Easy TCP Analysis让TCP数据包分析变得跟看聊天记录一样简单

按数据包的交互顺序,以聊天对话的方式向用户呈现TCP数据包往返过程,能够清楚地看到三次握手、四次握手的过程。能够清楚地看到有没有漏掉的数据包、以及粘包和拆包。可以清楚地看到seq和ack的增加过程,也能清楚地看到TCP的keepalive等。

2024-04-07 21:09:36 610

转载 复盘我从0开发文件上传中间件,上线一年多遇到的疑难杂症

前期的技术选型非常重要,理想的架构自然好,但要考虑团队有没有人能hold住,出了问题是否能解决。如果hold不住,技术选型应该保守一点,可以不那么完美。

2024-03-03 09:00:00 28

转载 中间件服务上线,那跟电影里的拆炸弹一样刺激

Apollo的恢复策略需要指定IP,如果是容器化部署的服务,容器重启IP就不同,而技术栈的原因,启动的时候拿不到正确的配置容器就启动不起来,所以配置方面也缺失灰度能力。这次升级,给我的感觉就像电影里面的情节,在电影中经常出现的拆炸弹情节:一个人被迫面对拆除一枚定时炸弹的任务,他必须仔细选择正确的线剪断,以防止炸弹爆炸。所以,因为这一点粗心,漏了一个配置,结果服务没启起来。我们没有控制到百分比流量的粒度,而是节点粒度,如果节点只有两个,那就是百分之五十的粒度,这跟全量没区别,相当于直接上线了。

2024-03-02 18:15:55 24

原创 云原生专栏第一阶段完结,第二阶段开始

由于方向的错误,我们这个项目也迎来了终结。但我们换了个方向做云原生SaaS平台,而这个平台也不再基于kubevela,也不使用云厂商的Serverless,而是自实现Pod调度器,结合云提供的节点弹性扩缩容,实现自己的Serverless,没有最低request的限制,并通过超卖算法,实现资源的合理利用,进一步优化成本,体现Serverless的优势。此篇是该专栏的完结篇,后续该专栏不再更新。

2023-12-16 12:35:03 1217

原创 阿里云ACK(Serverless)安装APISIX网关及APISIX Ingress Controller

在k8s上安装apisix全家,通过helm安装很简单,但是会遇到一些问题。

2023-11-12 20:40:18 682

原创 组件和框架的初始化顺序背后可能隐藏着线上故障?

一个微服务可能引入非常多的SDK,例如消息中间件kafka的组件、RPC框架dubbo、定时任务调度平台xxl-job的组件,以及提供web服务的jetty/tomcat等。

2023-10-26 12:19:55 135

原创 代码扫描工具选型调研

代码的健壮性也是保证代码质量的前提,统一的编码规范甚至格式化规范能够为人工review降低代码阅读的难度,从而提升发现问题的概率,也降低分支合并冲突让人抓狂的冲突处理出现。可整合其它工具,例如PMD,如果配置Java使用sonar-pmd-plugin插件,那么sonar-scanner从SonarQube下载的扫描插件就是sonar-pmd-plugin插件。除了合并PR时的代码扫描,开发阶段的代码扫描也很有意义,能够及时纠正编写错误的代码,也应该力推开发同事去使用。可基于公司后端技术栈考虑。

2023-10-22 15:41:33 314

原创 如何实现存量业务的基础设施导入Kubevela+Terraform

由于terraform-controller使用的terraform docker镜像使用的terraform版本太低,import不支持把data也渲染出来,所以需要自己打一个terraform docker镜像。另外,由于高版本import出来的tf,用低版本apply也会有问题,同样需要重新安装terraform-controller addon插件,指定terraform-controller使用我们自己打的terraform docker镜像。

2023-10-21 12:15:48 169

原创 KubeVela跨地域的多集群管理方案

考虑到成本计算的问题,以及业务的加入退出问题,我们在每个区域部署一个代理集群,在代理集群上部署四层代理Nginx,通过四层代理将kubevela发起的kubenetates api请求转发给目标k8s集群。在公司网络规划上只允许一个区域的一个VPC跟另一个区域的一个VPC打通,同区域不同机房的网络都可以打通的网络架构基础上,由于一个区域可能有多个业务,业务的k8s分布在不同云厂商或机房,要让kubevela管理分布在各个地域机房的K8s集群,需要引入代理。

2023-10-13 13:29:19 132

原创 KubeVela自定义工作流步骤以及踩坑经验

由于kubevela以Addon提供安装扩展,因此我们需要用Addon作为自定义工作流步骤的载体,通过Addon安装工作流步骤和升级、卸载工作流步骤。自定义工作流步骤需要使用CUE语言,并且只能使用语言本身支持的操作和kubevela为我们提供的一系列内置操作。假设我们自定义一个工作流步骤是调用一个接口做某件事情,如果接口返回0,就是需要暂停工作流步骤等待人工完成审核,如果接口返回1,就是审核通过需要恢复工作流步骤,如果返回2,就是审核被驳回,需要终止工作流。发送http请求的HTTPDo操作。

2023-10-13 13:25:32 77

原创 一次Go项目进程重启故障问题排查

排查思路:由于容器已经重启过,当前go进程内存消耗还是正常值,不过从监控指标已经看出,内存会缓慢的涨上去,因此我们是先查看当前时间的内存使用情况,记录下来,待一个小时以后,再看一次,对比看哪里的内存是上涨的,然后再追踪内存是从哪里分配的,最后再看代码,看看哪里占用了内存没有释放。

2023-10-12 09:20:00 299

原创 KubeVela可持续测试应用部署之Mock基础设施

方案一的好处是,上层使用上没有任何区别,整条链路上没有任何改动。而方案二会修改application.yaml,且不会跑terrafrom-controller的逻辑,整条链路实际上是不完整的,导致测试覆盖率低,有一些底层的问题无法在测试阶段发现,例如terraform-controller可能存在严重的bug。方案一的缺点也很明显,因为需要mock非常多的接口,而且还需要对混合云提供的terraform provider的代码或者相关接口非常熟悉才可以。学习使用成本太高,效率没有方案二高。

2023-10-12 09:05:56 110

原创 阶段一完结篇:我为社区贡献了3个PR

平时的技术方案设计都会受限于我们当前所掌握的知识,我们只能设计出我们认知范围内的方案。

2023-07-23 21:11:07 266

原创 KubeVela篇10:KubeVela 私有云Terraform Provider Addon插件开发指南

从Terraform controller源码ConfigurationReconciler类可以找到,terraform镜像可以从环境变量“TERRAFORM_IMAGE”取,而Terraform controller会打包成helm chart,通过查看helm chart的terraform_controller.yaml文件,发现。。。

2023-07-23 10:59:23 135

原创 KubeVela篇09:KubeVela工作流步骤CUE模版和Go代码是怎么关联的

terraformProvider、multiclusterProvider、oamProvider、configprovider、kube这些provider的Install方法注册了很多操作处理方法。这些方法就是提供给CUE中调用的方法。

2023-07-23 10:58:28 99

原创 KubeVela篇08:一个组件的输出作为另一个组件的输入案例及传递原理

kubevela安装一个Application的过程,就是执行工作流上的每个步骤的过程,并且当我们未配置工作流,kubevela会自动为组件的部署生成一个工作流步骤。工作流可以插入人工卡点,也可以插入一个read-object的工作流步骤,来衔接前后两个工作流,实现数据的传递。而当我们配置工作流后,组件的部署就需要我们编排,kubevela不会再为组件的部署生成任何工作流步骤。工作流的编排可以指定步骤的依赖关系,哪个步骤依赖哪个步骤,被依赖的步骤先执行。

2023-07-23 10:57:33 63

原创 KubeVela篇07:terraform controller实现原理

terraform-controller是一个专门负责terraform一类的组件"安装"的Operator,通过打包成helm,再封装成kubevela的Addon,由kubevela安装到管控集群,为其它terraform provider插件提供模块定义支持。

2023-07-23 10:55:52 219

原创 KubeVela篇06:Kubevela Addon插件安装原理

addon支持从本地、git仓库、helm chart仓库安装,最终原理都相同,因此我们以本地安装为例。

2023-07-23 10:24:42 254

原创 KubeVela篇05:为kubevela开发terraform-mycloud Addon插件

我们需要将mycloud terraform provider包装成kubevela可安装的Addon插件,并且通过提供私有云基础设施资源对应的terraform module,用来生成kubevela中的组件定义,这样我们才能够在application部署描述文件中,通过为应用添加组件的方式,声明使用我们的基础设施资源。

2023-07-23 10:23:32 227 3

原创 KubeVela篇04:KubeVela打通Terraform申请云资源

以使用阿里云的基础设施为例,如何在kubevela上交付基础设施。

2023-07-23 10:20:57 224

原创 KubeVela篇03:了解KubeVela安装一个应用的过程

执行vela up -f application.yaml命令,实际就是将application.yaml apply到k8s中(这里指的是kubevela底座的k8s集群,即管控集群),然后由application_controller监听事件处理application的安装/更新。application_controller中会将应用的部署转为工作流(Workflow),每一步称为一个工作流步骤(WorkflowSteps),安装应用,就是按依赖顺序执行工作流步骤。

2023-07-22 10:30:11 87

原创 KubeVela篇02:初识KubeVela,进一步理解OAM模型

官方文档把模块定义比作乐高积木,非常形象且易于理解:模块定义是组成 KubeVela 平台的基本扩展能力单元,一个模块定义就像乐高积木,它将底层的能力封装成抽象的模块,使得这些能力可以被最终用户快速理解、使用并和其他能力组装、衔接,最终构成一个具有丰富功能的业务应用。

2023-07-22 10:29:22 141

原创 KubeVela篇01:部署即代码-编写yaml在KubeVela上交付第一个应用

体验什么叫yaml开发工程师

2023-07-22 10:27:49 215

原创 terraform篇03:terraform provider开发避坑指南

上一篇我们以一个简单的vpc资源为例,学习terraform provider的开发全流程,这篇主要介绍实际项目开发中我们可能会遇到的问题。这两篇以快速入门和避坑经验分享为主,推荐阅读官方文档学习更多。

2023-07-15 16:59:28 346

原创 terraform篇02:为私有云开发一个terraform provider

介绍如何为私有云开发一个terraform provider。

2023-07-15 16:58:40 398

原创 terraform篇01:初识terraform,用代码减少沟通成本

通常申请IaC,我们需要向运维描述我们需要什么IaC、什么规格,运维根据我们的描述去检查是否已经申请过这样的资源,有就会直接给我们使用IaC的信息,没有再帮我们申请,然后告诉我们使用IaC的信息,例如mysql的jdbc和用户名、密码。如果将描述代码化,IaC的申请自动化,就能实现“基础设施即代码”。而terraform就是实现“将描述代码化”的工具软件。

2023-07-15 16:57:46 323

原创 Operator实战4:如何获取已经被删除的pod的日记

一种方案就是添加一个controller(operator),监听terraform job创建的pod,然后给pod添加finalizers,然后监听job的删除,在真正删除之前先获取pod的容器的日记,将日记通过configmap保存下来,或者发送event。

2023-06-27 19:48:28 612

原创 Operator实战3:Operator开发过程遇到的问题

当我们一个中间件使用多个configmap的时候,每个configmap的挂盘路径是不能一样的,否则后面的会覆盖前面的,另外subPath也是不能用的,这样会导致configmap内容更新的时候,容器里面的配置文件不会更新。

2023-06-03 16:09:35 549

原创 Operator实战2:实现webhook修改Job的最大重试次数

Kubernetes apiserver提供两种特殊的准入控制器,分别是MutatingAdmissionWebhook和ValidatingAdmissionWebhook。这两种准入控制器,将发送准入请求到外部的HTTP回调服务,并接收准入响应。准入控制器就是在对象持久化之前用于对 Kubernetes API Server 的请求进行拦截处理,在请求经过身份验证和授权之后放行通过。Mutating准入控制器可以修改被处理的资源对象,Validating准入控制器则不能修改。

2023-06-03 15:55:13 336

原创 Operator实战1:使用kubebuilder开发一个部署web服务的Operator

虽然API上并没有对如何设计资源的状态做任何约定,包括kubernetes在1.19版本之前提供的内置资源,它们的状态也并不都遵循约定,但状态的设计建议还是遵循官方新提出的约定,可参考这篇《kubernetes设计与实现-API设计约定-condition设计约定:https://renhongcai.gitbook.io/kubernetes/di-shi-liu-zhang-api-she-ji-yue-ding/1.2-api_convention_condition》。

2023-06-03 15:38:52 865

原创 初识Operator,中间件云原生利器

Operator是什么,为什么中间件云原生需要Operator?中间件云原生改造一定需要Operator吗?

2023-05-27 14:50:54 323

原创 中间件篇:中间件容器化部署实现方案的前期调研

使用PV+PVC方式,实际就是挂载一个远程文件系统/块存储设备,存在网络I/O性能开销,具体性能影响,要看远程文件系统/块存储设备的实现原理,可能会利用本地磁盘暂存+内存缓存减少一些网络I/O的开销,但肯定比不上使用节点本地磁盘。

2023-05-14 18:17:28 688

原创 序篇2:从2023年北京站全球架构师峰会看云原生发展趋势

Serverless、ServiceMesh是2023年全球架构师峰会(北京站)出现频率最高的词,本篇将从这两个方面分享笔者参会了解到的一些信息。参与此次会这后,我更坚信我们云原生项目所走的方向的正确性,以及预测到未来需要解决的难题。

2023-05-14 01:01:11 171

原创 序篇1:云原生企业级实战笔记专栏开篇介绍

在实战的过程中,我自己做了很多笔记,从模糊到清晰,逐渐了解云原生架构,不仅参与了中间件容器化架构改造与自动化部署Operator开发,还参与了IaC基础设施即代码的开发,kubevela terraform Addon插件开发,从应用层到中间件到基础设施都有参与,整条链路的一些核心原理都非常清晰。其实不仅是我,整个团队,包括领导,大家都是0经验,一点点学习摸索,请教一些资深的专家。我将通过专栏的形式,将笔记脱敏,并增加一些内容,形成从0基础入门学习的教程,当然,专栏是收费的,毕竟不是为爱发电。

2023-05-13 12:19:13 417

原创 如何开发一个项目脚手架

创建一个项目通常需要依赖很多的二/三方组件,我们很难记住每个组件的maven坐标,并且有些组件的初始化工作很繁琐,一堆配置项很难记住。如果没有脚手架,每当需要创建一个新的project,我们通常会选择基于现有的project复制一份,然后修改修改。如果是纯粹的只使用spring的三方组件就能创建一个project,那么我们完全可以使用start.spring.io提供脚手...

2022-06-14 21:00:43 975

原创 这么理解TLS协议,以及TLS协议的握手过程

如今HTTPS已被广泛使用,但作为程序员的我们,真的理解这个'S'了吗?如果还没有,这篇入门级介绍或许能帮到你。在TLS(更早期的版本是SSL)出现之前,很多公司为了保证自家产品客户端与服务端信令交互数据安全,或通过基于TCP协议,自定义支持加解密的二进制应用协议(用于APP),或通过加密HTTP协议请求&响应的Body以确保数据安全。无论哪种,通常都是采用对称加...

2022-05-29 15:02:04 4176

原创 开发也需了解的网络知识,实践验证真理

无论是以前工作需要,还是兴趣爱好,我们大多数人可能都只是研究学习过少数几种网络协议。因公司规模或者说项目的原因,流量远达不到需要我们去关心网络方面问题,又或者没机会去接触。笔者现在参与网络项目的研发,发现自己很多网络知识都不了解,在跨部门沟通时很是被动,需要补一些网络方面的知识。本篇我们一起从一个后端开发者的视角,理解带宽、以及内容分发网络CDN。网络带宽影响应用吞吐量瓶...

2022-05-10 08:30:00 195

原创 Dubbo支持自适应等待无损下线

无损上下线是服务治理不可忽视的问题,在应⽤上下线发布过程中,如果上下线不平滑,就会出现短时间的服务调⽤报错,如连接被拒绝(Connection refused)、请求超时或请求异常。请求超时发生在服务提供者上线时,由于过早暴露服务,请求进来时,可能应用还未初始化完成,如中间件的初始化、IOC容器的初始化。连接被拒绝、请求异常发生在服务下线,如果中间件的销毁早于Dubbo就会出现请求异常;如果请求未写入IO通道就关闭连接,就会导致服务消费者接收IO异常;如果服务消费者感知提供者下线有延迟,就会导致延迟的这段

2022-04-20 11:11:57 2450

原创 Dubbo之HTTP RPC vs Dubbo RPC性能压测

公司内部的RPC框架,经过长时间的发展,已经由完全自研演进到底层替换为Dubbo实现,但使用方式(API)还是不变。由于使用了PB序列化协议,以及业务码+操作码定义接口的方式,非常影响开发...

2022-02-26 12:29:47 1081

原创 终于知道Dubbo泛化调用这个功能的用途了

两年前,笔者读Dubbo源码的时候就看到了泛化调用(GenericService)的逻辑,当时不知道为啥会有这个逻辑,想不明白,于是就跳过了。两年后再次接触Dubbo才看懂了泛化调用的逻辑...

2022-02-20 16:59:17 1994 1

IPv4-国家-区域-城市-运营商csv格式数据库-附使用java写的使用demo

此ip库数据为2018年的,不是最新的,所以不保证准确率。 此IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.CSV库可用于根据ip查询ip的归属地,可以获取到国家、区域(省)、城市,以及运营商,11000000+数据。 附可运行的使用demo。(demo未做性能优化,很慢也很耗内存,运行请准备好几个g的内存) 此demo不会考虑性能问题,只是用于指导怎么解析ip地址库文件,实现根据ip查询ip的地理位置信息。 运行此demo,请执行DemoMain类的main方法,此demo由于不考虑性能问题,执行时间会比较久,请耐心等待(大概6分钟)。 如果发现卡住(超过10分钟都没执行完成),请调整堆内存重新执行,通过-Xmx6G -Xmx6G调大内存。

2023-10-14

2019年毕业设计-一款情侣APP 附论文、作品视频演示、代码

关键技术 1、Spring Boot是目前主流的以java为开发语言的后端框架,以“约定优于配置”为约定,简化Spring项目的配置。Spring Boot并非一种新的框架,而是为方便整合Spring、Spring MVC以及各种持久化框架所编写。Spring能经久不衰,与其IOC和AOP两大特性密不可分。 2、为解决直接使用jdbc实现数据增删改查所带来的,编码复杂且重复率大、sql注入问题。选择Mybatis框架作为数据持久化层框架,不仅易于上手,更有着由于其它持久层框架的易于扩展性,同时提供插件支持,可以实现sql查询监控以及动态替换公共字段等。 3、要保证用户的数据安全,系统需要对用户可访问的资源进行管理,用户所发表的时光、相册等只能情侣之间可访问,对其它用户不可见,系统引人Shiro框架对用户权限进行管理,系统分普通用户角色于情侣角色。 4、为提供后端接口服务机器之间共享Session,为增强系统并发访问,降低请求延时,对热点数据进行缓存,本系统引入Redis提供数据缓存层。 5、即时在线聊天选择Netty框架。

2023-10-13

2019毕业设计作品-一款支持来电拦截的通讯录APP 附论文核心部分、项目代码

集通话记录、联系人管理、来电秀、骚扰电话拦截功能于一身的通讯录APP。本应用可以根据正则匹配过滤来电,精确的拦截骚扰来电, 而过滤规则可由用户自行定义。如拦截以“0777”开头的号码的来电。当有来电时,应用会先获取用户配置的号码黑名单列表,匹配如果号码不在黑名单列表才会继续匹配过滤规则。 您可以基于此做二次开发作为你的毕业设计,例如拦截功能扩展为支持用户通过编写脚本自定义自己的拦截规则,这样可能满足用户的需求,也能带动用户学习了解一门脚本编程语言,这是件有意义的事情。 注:关于代码,由于本项目开发时间比较早,当时android才出到android 8,所以可能用现在的高android版本的手机可能无法运行。但如果用android8以下版本是可以运行的。

2023-10-12

Java堆外内存使用分析详细

这个视频指导我们java开发遇到堆内存使用正常、gc正常,但实际使用的物理内存缺非常高,特别是容器化部署很容易因内存使用超limit限制导致pod重启,怀疑堆外内存泄露?如何排查堆外内存的使用情况,这个视频详细讲解了。英文无字幕,介意忽下载哈!原来线程数大多也会占用非常大的内存,原来gc也会占用非常大的内存...

2023-10-12

ArchSummit 2023 全球架构师峰会 北京站 PPT(公开)

01-从NewSQL到全新的HTAP分布式架构演进-张潇 01-从互联网到 ToB 服务 - 私有化部署对架构师的挑战-张铎 01-金融级系统海量流量下的高可用架构实践-康杨 01-美团优选智能质量方案探索-王昭 01-中国移动智慧中台赋能企业数智化转型实践-兰建明 01-字节跳动云原生大数据发展之路-余炜强 01-在线优化技术在快手联盟上的实践和产品化-谢淼 博士 01Hudi_Presto 在 News Break 数据平台的尝试--关立胜 01OceanBase的OLAP能力提升实践--杨志丰 01京东到家核心系统微服务演进落地实践--孙岩 01拒绝孤岛-可观测数据融合分析--张城(元乙 02-斗鱼高并发架构实践-李奇 02-华为机器翻译模型训练推理加速实践-魏代猛 02-基于风险驱动的交付模式转型探索与实践-黄佳鑫 02-基于云原生Serverless和消息服务技术采集全球分布业务数据实践-马腾 02-网易严选B端业务数字化之路-郑令飞 02-小红书云原生实时数仓的建设与实践-王成 02畅捷通多租户多数据中心的架构演进--郑芸 03-陌陌云原生微服务架构落地实践-袁世超 ...

2023-10-12

用c#实现的读取rtf格式文件的工具类

一个简单的读取RTF文件的类。 实现简单的翻译如下的RTF文件的代码 {\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fswiss\fcharset0 Arial;}} {\colortbl ;\red255\green0\blue0;\red0\green0\blue255;} \viewkind4\uc1\pard\lang2052\f0\fs18\\ \cf1\f1 fgsdgfdghfdsgsd\cf0 fgfdsfdg\par ffffffffffffff\b\f0 fffffffffff\ul\b0\f1 fffffffffff\highlight2\ulnone ffff\par ffff\highlight0\\8888\\8888 \cf1\highlight2 \cf2\highlight0 \i\f0 fff\i0\fs53 fffff\i\fs18 f\par }

2016-01-21

空空如也

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

TA关注的人

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