自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DevOps:从「蒸汽时代」到「高铁时代」,SUNMI DevOps转型之路

商米科技成立于 2013 年,总部位于上海市杨浦区创智天地,是一家极具产品创新基因和互联网基因的公司。商米在短时间内迅速成长为一家近1000人的企业,产品研发人数占比一度超过70%。做为一家初创企业,商米研发团队早期也经历过与当下大部分创业公司一样困境:协作基本靠吼、发布基本靠手的阶段。然而,业务的快速发展,团队规模不断的扩大,给商米带来了在「团队协作」和「工程效能」上的双重挑战。一、蒸汽时代...

2020-03-14 14:18:16 1611 2

原创 【开源库推荐】go-linq 强大的语言集成查询库如,ORM一般丝滑处理内存数据

在业务开发过程中除了业务逻辑、数据库之外主要就是数据转换处理过滤等相关的内容,比如合法性验证(可以使用”go-playground/validator“)但是golang在数据处理上面尤其是对结构体上官方几乎没有提供一些便捷的方式,大部分都只能使用for、if等方式自己来处理,也有研发用偷懒的方式全部交给数据库写出了N张表的关联导致了数据库瓶颈等问题。那么有没有什么更加方便好用的方法来更加方便的处理数据又能够降低代码复杂度,写出更加可读的代码呢?

2022-09-19 09:38:06 97

原创 singleflight 防止缓存击穿、并发结果共享(golang官方包和go-zero实现对比)

缓存”详细大家都不陌生,在高并发系统设计中缓存是个必不可少的因素,它能够帮助按照一定规则保存处理好的解耦从而提高系统吞吐量和响应速度,我们常见的缓存组件包括Redis、ES等。但今天并不是来介绍缓存组件的,而是在实现过程中大家都会关注到的一个问题"缓存击穿",什么是缓存击穿呢?缓存击穿:平常在高并发系统中,会出现大量的请求同时查询一个key的情况,假如此时这个热key刚好失效了,就会导致大量的请求都打到数据库上面去,这种现象就是缓存击穿。

2022-09-13 09:30:00 72

原创 如何提高“可读性”和“可单测” 降低代码复杂度?& Golang 代码复杂度检测工具 gocyclo

作为一名合格的程序员我们都知道代码可读性的重要性,所以会尽量不写出非常复杂的代码,这里面就有很多方法论了,什么分层、抽象、条件前置、依赖前置等等。拿有没有一个标准作为复杂度的衡量依据呢?这里就要提到一个名词“圈复杂度”,“圈复杂度”是用于表示程序复杂度的软件度量的一种方式。它是通过代码的线性独立路径数量的定量度量。它由Thomas J. McCabe, Sr.于 1976 年开发。1 - 10 程序简单,风险小11 - 20 更复杂,中等风险21 - 50 复杂、高风险。

2022-09-07 09:30:00 49

原创 Go 限流控制《滑动窗口&令牌桶》:time/rate、TokenLimit、PeriodLimit

流量控制基本是《微服务》和高并发系统设计的入门课,即便是在早期各种负载均衡和网络组件(如nginx、iptable、TC)都有提供基础的QPS限制能力,如今演进到微服务框架、Sentinel、Service Mesh和Serverless都已经具备完备的配置化的限流的能力已经能够满足大多数场景了,但如果我们在一些不以服务作为颗粒的方式可能就不太适用了,比如以下几个场景:- 调用外部三方服务存在频率限制

2022-09-05 09:30:00 56

原创 【开源软件推荐】gorm 数据库反向生成status结构工具 gormt

Gorm是比较经常使用的orm基础库,也是从2017年到现在5年时间从beego、sqlx、xorm、gorm等数据库操作框架中跑出来的一个比较好用的orm库,但随着go-zero、Kratos等框架的逐渐流行,所谓是在数据库操作上百花齐放,go-zero通过生成的方式非常好的集成了数据库和cache之间的打通,Kratos则Facebook 开源的Ent定义数据操作。但他们都是可选项如果你熟悉传统的orm的方式gorm将会是你的不二之选。

2022-08-21 15:16:03 191

原创 依赖注入的正确打开方式 bilibili/kratos × google/wire

依赖注入相信大家都不陌生也不是什么新鲜的概念了,笔者初次深切体会依赖注入这种设计模式是在16年笔者在学习phalapi框架时使用的DI()函数,简单来说就是将所有的资源初始化集中在一起,通过统一的容器对外提供,而不是通过全局变量或到处New的方式。最近在学习kratos又看到一个团队的历史项目都使用wier,一个是正面教材一个是反面教材也有一些自己的思考,希望能够分享出来和大家交流交流。......

2022-08-07 12:56:34 37

原创 【gock】 无侵入的 Http Mock 工具

笔者最近和应该是抄了单测老家,各种mock、打桩场景都遇到很多,近期就遇到了一个需要httpmock的场景,主要是在一个环境中有几个依赖服务应为一些原因没法提供,但是有需要再这个环境上来验证一些其他的服务组件是否正常。单独写个http-service提供mock能力,修改服务发现地址在程序启动时启动一个http端口提供mock服务,在改写服务请求地址在逻辑层进行判断读取相关返回参数还有一个就是我提出的通过gock无侵入来mockhttpshttps。...

2022-07-31 11:23:49 74

原创 如何做好单元测试?Golang Mock”三剑客“ gomock、monkey、sqlmock

单元测试一直是一个研发过程中老生常谈的话题,能够把单元测试做的比较好的公司也寥寥可数。最近同事开玩笑说最不喜欢的两件事情”接手的代码没有单测和别人让我写单测“,也能看得出大家对单测是又爱又恨。但真实情况是单测确实能够提高质量,一般公司架构团队或TL会要求业务研发有单测指标,但很容易因为”成本“问题最终以失败收尾,那怎么能够降低单测成本又能享受到单测带来和好处就是本文的”目的“了。代码可测性低成本mock逻辑断言工具httpsmonkey原理解读httpshttps。...

2022-07-17 12:17:56 376

原创 Go-Zero 业务开发军火库

“遇山开山,遇水架桥,千头万绪,止于一端”,这是笔者对Go-Zero的一些浅薄的认知,Go-Zero是在《晓黑板》发展和语言转型过程中工程化的最佳实践,根据遇到的通用性问题,打造的开箱即用的武器库。笔者也因为工作过程中的需要封装了一个开源库Go-Core所以非常能够理解Go-Zero创造出来的背景以及核心,我也挑选了几个关键词来表述这些研发理念。核心标签:Github:https://github.com/zeromicro/go-zero/最新文档:https://go-zero.dev/历史文档【推

2022-06-26 12:32:11 309

原创 gocore-v2框架-HTTP初始化&路由注册

Github官方文档地址-持续更新中在HTTP接口开发过程中,考虑实际场景初始化默认开启:Gzip压缩:gin-contrib/gzip优雅重启&关闭:fvbock/endless默认开启Recovery、Logger根据utils.IsRelease设置终端输出程序结束Close中间件连接func RunApi(c *cli.Context) error { defer closes.Close() initConf() initDB() initCache().

2021-12-20 11:26:21 172

原创 gocore-v2框架-API接口开发理念

Github官方文档地址-持续更新中gocore框架最核心的能力是围绕着日常业务开发设计的,其中以Api为最高频的场景,根据在项目研发过程中的积累的经验进行了封装和集成。特性:基于主流框架Gin统一POST请求和JSON传参(统一签名鉴权加密)统一返回数据格式(Code、Data、Msg)集成context.Context包,自动捕获链路信息最佳实践核心理念:让研发更多关注业务,通过非侵入式来提供各项扩展能力,所以不使用各类侵入式的微服务框架:基于K8S+Istio体系来实现微服.

2021-12-09 15:49:49 262

原创 gocore-v2框架-gocore.yaml配置文件介绍

Github官方文档地址-持续更新中作为脚手架最重要的就是描述文件,通过描述文件来定义项目信息、接口模块路由、入参出参等,通过配置信息来生成项目骨架,可以大量减少重复机械式的工作。gocore使用yaml作为描述文件的格式,相对其他文件格式yaml能够比较好的表现出层次结构,尤其是在定义接口请求参数status时可以支持比较复杂的关系,比toml和json更加可读。脚手架工具基于yaml配置文件生产代码,主要特性:支持Api、cronjob、job类型自动生成Api接口路由入口方法.

2021-12-07 11:48:28 67

原创 gocore-v2框架-脚手架生成项目结构介绍

通过脚手架可以快速构建项目,无需从0开始创建目录结构,无需复制历史项目统一替换项目名,通过一行命令就能快速生成项目结构和基础骨架代码,并且融入接口开发理念ADM(Api-Domain-Model)分层方式来进行开发规范的约束。目录结构如下:.├── Dockerfile #docker镜像打包├── README.md #项目介绍├── app │ ├── api #api接口入口│ │ └── user.go│ ├── cronjob #定时任务,业务逻辑处理│ │

2021-12-06 13:47:51 694

原创 gocore-v2框架-快速开始

通过gocore工具可以快速生成开发骨架,框架会提供一个gocore.yaml文件来管理动态生成配置,开发者可以通过对yaml文件进行修改来定义cmd、api、job、cron、model、config以及中间件等 。特性:当创建项目同时会执行mod init、mod tidy、fmt、goimports来保障项目符合Golang标准在数据表结构创建支持连接mysql反向生成model结构@TODO 未来将支持从swagger导入和导出swagger功能创建一个示例项目# 创建工程文件夹&

2021-12-02 15:23:12 184

原创 gocore-v2框架发布-集成脚手架能力

官方文档地址-持续更新中介绍gocore是一款高度集成的开发框架和脚手架,支持api、rpc、job、task等开发方式,并且集成各类主流开源库和中间件融入最佳实践,最终实现简化流程、提高效率、统一规范。特性底层基于主流框架gin、gorm、viper、zap等进行封装整合提供脚手架gocore工具快速初始化项目结构、接口参数路由、数据库模型(包含逆向生成status)支持多环境多套配置文件并且和nacos配置中心打通,支持热更新等特性提供签名、加密、文件、邮件、随机数、链路追踪、时间、日.

2021-11-12 09:22:56 273

原创 平台化如何助力研发效率提升?

近期公司组织了《华山论剑》对平台化这个话题进行了讨论,有一些感触和大家分享分享:什么是平台化?平台化是一个很大的概念,在生活中处处存在这各类平台,一个网站可以是一个平台,一个商城可以是一个平台,汽车底盘也可以是一个平台,游戏引擎也可以是一个平台,甚至于菜场都是一个平台,可以罗列生活中的一些例子。汽车:底盘CMA平台电视:阿里B2B、淘宝的C2C、天猫的B2C,商家和顾客之间的线上平台咸鱼:二手交易平台X86:电脑指令集平台GitHub:开源代码共享平台开发者平台:提供

2021-07-11 14:06:41 191

原创 阿里云微消息队列 MQTT

前言因为工作上的事情比较繁忙,近期的博客更新率已经创了新低,所以想着把一些工作上的调研笔记????进行一些分享,希望可以帮助到想了解特定知识的小伙伴。今天推荐给大家的是阿里云的MQTT队列服务,笔者早期发不过去EMQ-MQTT系列,但是现在整个集群连接规模已经破了百万,也涌现出了很多问题:集群稳定性堪忧,大流量会导致雪崩使用iptable限流也只能缓解安全性堪忧,密码规则认证过于简单,虽然有TLS证书配置但是相比之下资源消耗是不加TLS的四倍,如果用TLS终结前置服务器最少16台也是恐怖的支出和维

2021-03-14 10:47:36 657

原创 Wayne - 360开源多租户K8S管理平台(使用教程)

Wayne是笔者无意之间刷文章了解到的,简单使用之后发现能解决当前眼下诸多问题,出于推动公司容器化进程的原因选择开始使用,当前所有环境都已经在使用中。借助官方的介绍Wayne 是一个通用的、基于 Web 的 Kubernetes 多集群管理平台。通过可视化 Kubernetes 对象模板编辑的方式,降低业务接入成本,拥有完整的权限管理系统,适应多租户场景,是一款适合企业级集群使用的发布平台。附...

2020-04-22 09:07:24 1694

原创 Wayne - 360开源多租户K8S管理平台(介绍和安装)

Wayne是笔者无意之间刷文章了解到的,简单使用之后发现能解决当前眼下诸多问题,出于推动公司容器化进程的原因选择开始使用,当前所有环境都已经在使用中。借助官方的介绍Wayne 是一个通用的、基于 Web 的 Kubernetes 多集群管理平台。通过可视化 Kubernetes 对象模板编辑的方式,降低业务接入成本,拥有完整的权限管理系统,适应多租户场景,是一款适合企业级集群使用的发布平台。附...

2020-04-22 09:06:54 1878

原创 Redash - 强大的开源数据可视化平台

我们会经常提到BI系统(Business Intelligence),它是一个重要的数据出入口,帮助数据,帮助企业获取数据表报制定战略决策。大家熟知的有FineBI和Microsoft的powerBI,但是使用成本都不低需要授权需要客户端,使用配置也相当繁琐。笔者今天给大家带来的是一款开源纯Web网页的数据工具。附上:喵了个咪的博客:w-blog.cnRedash官方Git地址:https...

2020-04-22 09:03:07 10168 1

原创 Nacos - 配置管理中心(阿里开源)

配置中心相信大家都有听过,zookeeper、apollo等等都是配置中心的代表,但大部分都是JAVA系为主的,笔者主要开发语言使用的是Golang当然也有类似于ETCD这样的组件,但是并不方便管理也无法可视化,在无意之间发现了阿里爸爸开源了nacos这个服务发现+配置中心组件,也经过了一段时间的时候在这里分享给大家附上:喵了个咪的博客:w-blog.cnNacos官方Git地址:http...

2019-10-24 09:10:59 10995

原创 Octan - K8S-Dashboard代替品

相信使用过K8S或容器化的大家都有了解过私有容器仓库Harbor,Harbor是VMware大佬开源的一个私有容器镜像仓库,VMware也开源了另外一个工具就是本文要说到的Octant,从笔者的角度上看来它更像一个Dashboard的代替品。附上:喵了个咪的博客:w-blog.cnOctant官方Git地址:https://github.com/vmware/octantPS:Octa...

2019-09-23 17:21:02 2116

原创 Kubernetes终端管理工具 — KubeBox

附上:喵了个咪的博客:w-blog.cnKubeBox官方Git地址:https://github.com/astefanutti/kubeboxPS:KubeBox需要依赖本地的kuberctl才能正常启动一、介绍和安装KubeBox控制K8S现在我们已经可以通过Dashboard和kubectl来控制了,但是笔者因为用的是阿里云的K8S集群,K8S-Dashboard是被阿里云...

2019-09-09 14:20:51 870

原创 Kubernetes命令行管理工具 — Kubectl

附上:喵了个咪的博客:w-blog.cnKubernetes官方文档:https://kubernetes.io/docs/reference/Kubernetes官方Git地址:https://github.com/kubernetes/kubernetesPS:本系列中使用 KubernetesV1.8 RancherV1.6.14一、国内安装Kubectl官网提供的安装命令...

2019-08-29 15:34:01 938

原创 Solr搜索引擎 — SolrCloud安装和集群配置

搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方式附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7...

2019-05-27 16:21:02 552

原创 Solr搜索引擎 — 中文全拼简拼分词

搞定了中文分词下一个就是要来搞定拼音分词了,拼音分词有分为全拼和简拼附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本一,全拼分词> wget http://files.cnblogs.com/files/wander1129/pi...

2019-05-27 16:20:21 668 3

原创 Solr搜索引擎 — 查询命令和两种中文分词使用

已经和mysql建立好了关联,可以查询和更新mysql的数据量,接下来就是进阶的使用方式了附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本一,查询命令的基本使用基本查询方式  q 查询的关键字,此参数最为重要,例如,q=id:1,默认...

2019-05-24 13:56:31 1789

原创 Solr搜索引擎 — 通过mysql配置数据源

上一节我们已经通过两种方式运行了solr,本节演示怎么配置solr的mysql数据源附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本一,准备数据库数据表结构CREATE TABLE `app` ( `id` int(11) NOT...

2019-05-21 17:26:58 2813 8

原创 Solr搜索引擎 — SolrCloud介绍和环境准备

搞定了一切的一切之后下一步就是正式使用了,但是之前介绍的都是在单台服务器上进行的部署,如果在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方式附上:喵了个咪的博客:http://w-blog.cnSolr官网:http://lucene.apache.org/solr/PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7...

2019-05-20 13:48:00 334

原创 Solr搜索引擎 — 两种安装方式

常常在业务开发中会遇到大列表的查询需求或者按照各项条件搜索内容,一般的做法往往都是数据库直接搞定,但是到了一定的程度只有这类需求会带来巨大的开销,一个表格中涉及到了5张表的数据,搜索要求从其中3张表的不同字段做到模糊查询,如果还用传统的方式实现起来就很有难度了逻辑和数据库性能就是一个考验,要是如果在A表一个字段是很长的text需要模糊匹配,在B表需要用简拼音搜索,那就难上加难了,solr恰巧就...

2019-05-17 11:06:58 289

原创 KONG网关 — 插件开发

虽然kong提供了那么多的插件,但是不可能百分百满足了对于网关的需求,在很多系统中不可能吧用户体系用到kong提供的权限验证体系,包括对于一套系统完整的RBAC系统大家都有不同的改进,以及请求加密参数校验等等,所以对于扩展性对于网关的定义需要有一定的能力的,kong是通过nginx+lua开发的通过lua脚本就可以扩展插件来完成网关的目的附上:喵了个咪的博客:w-blog.cnkong官网...

2019-05-10 16:30:54 3762

原创 KONG网关 — 丰富的插件

为什么kong这么火热呢?当然是它拥有强大的插件群来解决我们本来需要重复手动配置或者需要自己实现的内容,kong在1.X版本加强了对于插件的支持,官方提供的插件就是几十个,通过插件可以带来各种场景更加方便使用比较使用的功能:Oauth2.0Hmac AuthIP限制CORS 跨域配置限速请求大小限制Prometheus监控Http日志附上:喵了个咪的博客:w-blog....

2019-05-09 10:00:14 1008

原创 KONG网关 — KongA管理UI使用

kong虽然很强大,但是在管理方式上比较单一只能通过API请求来管理,那么有没有一个UI界面的管理工具呢?这里就要说到kong管理UI新起之秀Konga附上:喵了个咪的博客:w-blog.cnkong官网:https://konghq.com/konga官网:https://github.com/pantsel/kongaPS:Kong版本必须 >= 1.0.0才能正常使用ko...

2019-05-05 11:21:43 16848 3

原创 KONG网关 — 介绍安装

网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证,但是除了JAVA的spring cloud之外,公共网关屈指可数,其中最受关注的就是KONG了,笔者半年前就已经在使用kong的那时候使用的是0.11.2-bate版本(之前还被官方坑了一次),前不久终于等到了1.X的正式版发布了,笔者就在这里给大家分享一下kong网关的基本情况以及使用安装的方式。附上:喵...

2019-04-30 16:46:04 7411 2

原创 Grpc-Gateway - Grpc兼容HTTP协议文档自动生成网关

因为之前的测试结果让笔者对PHP使用GRPC很失望,如果使用HTTP的方式Guzzle还可以提供并发能力来降低接口消耗,Grpc只能阻塞,但是如果使用HTTP的话对于调用限制和GO调用GO来说不太友好,有没有一个两全其美的方式可以使用Grpc的前提下又兼容HTTP调用,让客户端可以更具自身情况自由选择,服务端工作只需要做一份呢?还别说真还有一个准备好的轮子那就是今天的主角《grpc-gatewa...

2019-03-18 11:21:31 1828

原创 Grpc — 整体性能测试

当然最最最重要的就是性能,在使用RPC的场景下对于多个程序通讯完成业务所消耗的性能是有巨大挑战的,笔者也做了一套完整的性能测试大家可以继续往下看。附上:喵了个咪的博客:w-blog.cn博文实例demo:GitHub - sunmi-OS/grpc-php-to-golang-demogrpc官网:grpc / grpc.ioprotobuf代码仓库:Releases · protoc...

2019-03-06 12:00:19 2297

原创 Grpc介绍 — Go-Service To PHP-Client

笔者现在公司项目大部分是PHP进行开发,要完成整体微服务化必须要考虑PHP使用上的可行性,Grpc也是支持PHP作为client端发起Grpc请求,但是依赖的扩展等都相对复杂(毕竟不是亲儿子),那么本文就接受怎么使用PHP调用Grpc服务。附上:喵了个咪的博客:w-blog.cn博文实例demo:GitHub - sunmi-OS/grpc-php-to-golang-demogrpc官...

2019-03-06 11:58:18 879

原创 Grpc介绍 — ProToBuf基本使用

RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源的Grpc,和Thrift有很大的区别Grpc是基于HTTP2.0并且依赖protobuf,为什么又推出关于grpc的文章呢?请大家继续往下看。附上:喵了个咪的博客:w-blog.cn博文实例demo:GitHub - sunmi-...

2019-02-28 10:57:47 694

原创 七, 跨语言微服务框架 - Istio日志采集EFK

ELK日志系统大家不会陌生(zipkin + jaeger , prometheus + grafana)解决了大家对于链路对于统计采集的需求,但是真正的对于日志进行存储还是得专业的上,在Istio中官方提供的方案是EFK(Fluentd + Elasticsearch + Kibana)Fluentd 是一个开源的日志收集器,支持多种数据输出并且有一个可插拔架构。 Elasticsearch是...

2019-01-28 18:42:39 1416 2

kafka-manager-1.3.3.17.zip

kafka-manager-1.3.3.17 已经编译好的版本,帮助大家节省编译成本

2019-08-07

空空如也

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

TA关注的人

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