kubernetes-api-conventions
本文介绍kubernetes的API设计,主要面向想要深入了解kubernetes API结构的用户。
kubernetes API采用RESTful风格(客户端create,update,delet,get对象通过标准的HTTP verbs),并且这些API优先选择JSON。
同时kubernetes也暴露一些不是标准HTTP verb的接口和使用其他的content类型。服务端接收和发送的JSON数据都有对应schema( JSON schema)
,kind和apiVersion这两个字段确定唯一的schema。
术语定义:
kind:Object schema的名称
Resource: 获取Object的特定URL(小写),所以Resource比如/api/v1/podsResource可以获取v1 Pod Object列表,这类Resource也被称为Collections;/api/v1/namespace/<namespace-name>/pods/<pod-name> resource可以
获取具体的v1 Pod Object,这类resour ...
Docker-container详解
本文介绍docker中的contanier,基于操作系统介绍什么是container。
进程(Processes)Container是具有指定配置的Linux进程(processes)。我们进行如下操作:
12345678910111213141516## 启动一个redis进程➜ ~ docker run -d --name=db redis:alpine## 显示容器运行的进程➜ ~ docker top dbPID USER TIME COMMAND2288 999 0:00 redis-server## 查看系统是否存在redis-server进程➜ ~ ps aux | grep redis-serverdonggang 10761 0.0 0.0 4258876 200 s007 R+ 6:57下午 0:00.00 grep --color=au ...
Asciinema终端录屏&Hexo文章目录管理
本文介绍了近期我在使用Hexo的两个技巧。一是使用Asciinema来录制终端Demo。并在Hexo博客
中显示。二是如何使用目录来管理Hexo文章,当博客越来越多的时候,这将十分必要,当然我并不
是博客太多才去分目录管理,主要是因为强迫症🤪。
AsciinemaAsciinme能够解决Hexo博文中显示多行命令行代码块不太友好的显示方式,同时也能更直观的阐述
命令的输入和输出。
如何使用
注册Asciinema, 官网。为注册用户
提供一个仓库。
下载客户端工具;1234# mac下homebrew安装brew install ascillnema
使用asciinema auth登录–>asciinema rec开始记录–>CTRL+D或者输入exit退出。
完成之后会输出对应的链接。具体配置参考官方教程
安装Hexo插件,支持Asciinema的渲染;
1npm install --save hexo-tag-asciinema
Vscode设置Markdown的Snippet,方便编写:
12345"Asciinema": ...
Spring事务&分布式事务&单服务处理多数据源事务
本文以一个实际业务问题来谈谈事务该如何处理。对接外部系统是是不可避免的,从广泛意义上来说,外部系统范围很大,中间件(数据库)也属于外部系统。当我们讨论事务时,通常我们将那些没有支持事务的系统称为外部系统,业务系统基本上都是外部系统。
问题有这样一套系统,以gitlab为底层系统, 在gitlab project的基础上封装了代码仓,系统对其中一些与gitlab关联的数据进行了落表。创建代码仓的逻辑过程比较复杂,首先通过gitlab创建代码仓(其中返回的代码仓id需要落库),系统表code_repo插入记录,创建gitlabhook,系统表member插入记录(维护系统用户和对应代码仓的关系),创建多个gitlabbranch(系统业务,初始化代码仓可以初始化多个分支),系统表label插入记录。
分析以上大概说明整个业务流程, gitlab接入的方式采用HTTP,不采用直接对接gitlab数据库的原因是,其创建项目和分支业务逻辑复杂,梳理代价很大。对接任何系统其实本质上可以概括为两种:
对接方式
优势
缺点
上游系统提供的接口
不需要关注上游系统的自身义务逻辑,维护只需要 ...
Spring Boot中的并发处理
在使用Spring Boot开发过程中,并发concurrency问题不可避免。很多开发者存在这样的误区,使用Servlets为每个请求分配一个新的线程进行处理就不再需要并发处理了。我将在这篇文章中介绍如何在Spring Boot中处理并发并且如何避免一些问题。
Spring Boot 并发基础有以下几点特别值得注意:
最大线程数:这是为处理应用程序的请求而分配的最大线程数。
共享资源:调用共享资源如数据库
异步方法调用:这些方法调用将会释放线程资源
内部共享资源:内部资源调用如缓存、共享应用程序状态
接下来我们逐一介绍如何处理这些场景
Spring Boot应用程序的最大线程数量首先我们必须限制应用程序的线程数量。如果使用默认内嵌的Tomcat Server,我们可以通过server.tomcat.max-threads变量修改线程数量限制。默认为200。我们可以通过修改此配置以更合理利用硬件资源。
共享外部资源调用数据库或者第三方Restful接口可能需要很长时间。
异步方法调用我们可能遇到一个请求会调用多个服务。比如一次请求调用Service A、B、C,你肯定不想这样调 ...
Hexo博客访问优化
通过Hexo&Gitpage方案部署的博客系统,访问速度确实很慢。一个网站如果在4秒内没有读取出来,大多数访客会选择离开。
分析首先需要排查出页面加载速度慢的原因,这里我们结合Chrome开发者工具和开源的在线网站测试(模拟不同地区和终端)进行测试。
chrome分析结果
通过比较Gitpage和本地访问情况,可以看出DomcontentLoad加载时间没有多少差距,那当然是请求资源load耗时比较长,其中一张4.5M的图片资源加载了3分钟。Chrome Devtool`相关介绍可以参考文档资料。
优化
图片压缩,加载一张图片速度是很慢
静态资源使用CDN加速
图片使用JsDelivs CDN加速,每次需要四个步骤,显然是反人类的,思考了一番,暂时通过一下方式解决,后续可以将所有操作步骤整合到命令工具中。
复制博客所在目录图片到CDN仓库目录 --> push到远程分支 --> release --> 修改博客文件图片引用地址
python命令行工具 --> git命令 --> 开源release-it --> 修改paste Ima ...
优雅的打印日志
日志是很多开发者在开发过程中很容易忽略,开发过程中开发者可以通过IDE或其他调试工具,。在软件的生命周期中,
分析丑陋的日志123456789101112131415161718192019-07-05 09:49:53k8s_cosmo-portal-console-app_cosmo-portal-console-app-6d7fc78d7b-29rw5_default_c8beb189-9e38-11e9-b1a0-0242ac120005_02019-07-05 09:49:53,257 INFO [com.cosmo.portal.interceptor.TokenInterceptor] - AUTH:x-usc-token:5354d67c-d2b1-42b0-8160-d7040a0fd1eb clusterId:qingdao2019-07-05 09:49:53k8s_cosmo-portal-console-app_cosmo-portal-console-app-6d7fc78d7b-29rw5_default_c8beb189-9e38-11e9-b1a0-0 ...
Hexo博客框架&Butterfly主题&Vscode&Paste Image插件
HexoHexo是一款快速、简洁且高校的博客框架,有以下亮点:
Markdown编辑模式;
静态,可以使用GitPage部署;
基于CLI优雅的管理模式;
1hexo clean && hexo s
主题酷炫。
为什么选择Butterlfy主题看图:Never put off till tomorrow what you can do today一语胜千言,警醒自己。
博客图片管理本人使用的是VSCode文本编辑器,改编辑器插件体系丰富,同时对VIM的兼容良好。Paste Image这款插件能够过从系统剪切板(clipboard)复制图片到Markdown或其他类型文件。
VsCode下载插件
打开VsCode设置页面,设置插件,${currentFileDir}/${currentFileNameWithoutExt},该变量与hexo生成的文件夹保持统一
hexo设置新建文章时同时创建资源目录
1post_asset_folder: true
缩略图
缩略图测试使用路径应用不生效, ...
python之旅
入坑 Python自从进入公司,到现在也有半年的时间。这半年的时间从 python 到入门到开发了几个小项目,类型涵盖了 web应用 程序、爬虫程序
(scrapy),python脚本工具,自动化工具。对 python 语言也越来越熟悉,当然也有所感悟和总结。首先 Python 真的让语言成
了一个工具,入门代价很小,上手能够开发出小工具,可以更快体验到编程的乐趣。但是做到pythonic 需要更多的学习和使用。
Python 可以胜任各种需求,而且对框架的依赖度不高,多熟悉 python 标准库以及常用第三方库,可以很快构建出解决方案。
关于编辑器的选择以及工作流构建从踏上编程这条路,就一直纠结与编辑器(IDE)的选择,几乎所有主流的文本编辑器和编辑器都尝试了一遍,包括 Sublime Text、
VS Code、SpaceEmacs(Emacs 的改进版)、终端 Vim、编辑器 MacVim、Pycharm 等可以说,一半的精力都在琢磨各种编辑器了,
至于孰优孰劣就不在这里讨论了,各种博客一大堆,也可以看出不止我一个人执着于此。我也不会评判“执着与编辑器”的对错与否,不过
如果有精 ...