云计算K8s组件系列—- 存储CSI

CSI是Container Storage Interface的简称,旨在能为容器编排引擎和存储系统间建立一套标准的存储调用接口,实现解耦,通过该接口能为容器编排引擎提供存储服务。


云计算K8s组件系列(八)---- 存储

Kubernetes 和 Docker 类似,也是通过 Volume 的方式提供对存储的支持。但是Kubernetes对容器存储做了一层自己的抽象,相比docker的存储来讲,K8S的存储抽象更全面,更面向应用,体现在如下几个方面:

  • 提供卷生命周期管理
  • 提供“声明”式定义,将使用者和提供者分离
  • 提供存储类型定义

云计算容器系列---- Docker image 优化

我们一般都是使用dockerfile来制作镜像。但是在镜像制作中,也有着很多的注意点,比如优化构建后的体积,还要优化构建速度,时区,证书等等。



云计算K8s系列---- K8s informer

client-go中的informer机制可以说是客户端交互中一种比较特别的机制,适用于像k8s这种控制器的各种模式。


云计算K8s系列---- K8s client

client-go就是字面意思,一个go的client库,用于和k8s的各种资源对象进行交互,但是它比传统的api客户端库多了很多高级的交互机制,比如informer,dynamic机制,这些也和k8s机制有一定的关系。


监控metrics系列---- 可视化Grafana

Grafana是一个跨平台的可视化展示工具,提供了丰富灵活的可视化展示方式,包括快速灵活的客户端图表,拥有不同方式的可视化指标和日志的面板插件以及丰富的仪表盘插件,包括热图、折线图、图表等。


云计算K8s系列---- K8s autoscaler

Pod 水平自动伸缩(Horizontal Pod Autoscaler)和垂直扩展(Vertical Pod Autoscaler)以及CA( cluster-autoscaler)特性,可以说是很实用的特性,完全自动化实现了资源的充分利用,所以单独拿出来说说。


云计算K8s系列---- kruise

OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment / StatefulSet 等控制器,但 OpenKruise 提供了更多的增强功能如:优雅原地升级、发布优先级/打散策略、多可用区workload抽象管理、统一 sidecar 容器注入管理等,都是经历了阿里巴巴超大规模应用场景打磨出的核心能力。这些 feature 帮助我们应对更加多样化的部署环境和需求、为集群维护者和应用开发者带来更加灵活的部署发布组合策略。


云计算K8s系列---- 网络CNI

CNI(Container Network Interface)是 CNCF 旗下的一个项目,最早是由CoreOS发起的容器网络规范,由一组用于配置 Linux 容器的网络接口的规范和库组成,同时还包含了一些插件。



分布式系列---- 分布式存储

分布式存储是相对于集中式存储来说的,分布式存储是一个大的概念,其包含的种类繁多,除了传统意义上的分布式文件系统、分布式块存储和分布式对象存储外,还包括分布式数据库和分布式缓存等。


云计算K8s系列---- K8s controller

pod只是运行的最小单元,我们一般不会直接使用pod。大部分情况下我们都是使用deployment(RS),deamonset,statefulset,job等控制器来完成部署调度使用。


监控日志系列---- Filebeat原理

Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。

filebeat源码归属于beats项目,而beats项目的设计初衷是为了采集各类的数据,所以beats抽象出了一个libbeat库,基于libbeat我们可以快速的开发实现一个采集的工具,除了filebeat,还有像metricbeat、packetbeat等官方的项目也是在beats工程中。libbeat已经实现了内存缓存队列memqueue、几种output日志发送客户端,数据的过滤处理processor,配置解析、日志打印、事件处理和发送等通用功能,而filebeat只需要实现日志文件的读取等和日志相关的逻辑即可。


架构系列---- 并发

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。


架构系列---- Architecture 总结

架构就是解决问题给出的整体技术方案,既要掌握整体,也要知道局部瓶颈能够解决具体业务的方案。

架构师,是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。


云计算K8s组件系列(一)---- K8s apiserver 详解

apiserver是集群的核心,是k8s中最重要的组件,因为它是实现声明式api的关键。

kubernetes API server的核心功能是提供了kubernetes各类资源对象(pod、RC 、service等)的增、删、改、查以及watch等HTTP Rest接口。


云计算K8s组件系列(四)---- K8s kubelet 详解

kubelet用于处理master节点下发到本节点的任务,管理Pod以及Pod中的容器。每个kubelet进程会在API Server上注册节点信息,定期向master节点汇报节点资源的使用情况,并通过cAdvisor监控容器和节点的资源。


云计算容器系列---- Docker network

容器网络的建立和控制是一种结合了network namespace、iptables、linux网桥、route table等多种Linux内核技术的综合方案,在宿主机和容器内分别创建虚拟接口,并让它们彼此连通。

  • network namespace:主要提供了关于网络资源的隔离,在网络栈中,包括网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Table)和 iptables 规则、IPv4和IPv6协议栈、/proc/net目录、/sys/class/net目录、端口(socket)等。
  • linux Bridge:功能相当于物理交换机,为连在其上的设备(容器)转发数据帧。如docker0网桥。
  • iptables:主要为容器提供NAT以及容器网络安全。
  • veth pair:两个虚拟网卡组成的数据通道。在Docker中,用于连接Docker容器和Linux Bridge。一端在容器中作为eth0网卡,另一端在Linux Bridge中作为网桥的一个端口。

计算机网络系列(八)---- Http

当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作原理。其中http是网络的最基本协议,也是我们下面重点了解的协议之一。


云计算K8s组件系列(五)---- K8s proxy 详解

kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服务,从apiserver获取所有server信息,并根据server信息创建代理服务,实现server到Pod的请求路由和转发,从而实现K8s层级的虚拟转发网络。


云计算K8s组件系列(二)---- K8s scheduler 详解

kube-scheduler是 kubernetes 系统的核心组件之一,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将 Pod 调度到最优的工作节点上面去,从而更加合理、更加充分的利用集群的资源。



云计算系列---- 云计算概念

目前云计算,云原生,微服务等概念已经不绝于耳,目前来说,上云已经是一种必然的趋势。



云计算K8s系列---- istio

istio是一款 Service Mesh 模式的落地实现,是目前servicemesh实现使用最多的一个方案,istio本身和平台无关,但是一般都是和k8s结合使用,首先k8s服务间通信和流控的相关操作。


监控系列---- log

日志是设备或者程序对自身状态和运作行为的记录,日志监控平台是包括日志采集,存储,分析,索引查询,告警以及各种流程管理的一站式日志服务,日志监控是监控体系中核心的建设,而且可以说是量最大的一项监控。



监控日志系列---- Filebeat

Filebeat 是使用 Golang 实现的轻量型日志采集器,是基于原先 logstash-forwarder 的源码改造出来的,没有任何依赖,可以单独存在的搞性能采集工具。


监控metrics系列---- Prometheus入门

Prometheus,它最早是借鉴了 Google 的 Borgmon 系统,完全是开源的,也是CNCF 下继 K8S 之后第二个项目。它们的开发人员都是原 Google 的 SRE,通过 HTTP 的方式来做数据收集,对其最深远的应该是其被设计成一个 self sustained 的系统,也就是说它是完全独立的系统,不需要外部依赖。



监控metrics系列---- Infrastructure监控方案

一个完整的监控体系包括:采集数据、分析存储数据、展示数据、告警以及自动化处理、监控工具自身的安全机制,我们来看看如何使用prometheus进行基础设施监控架构。


分布式系列---- 对象存储云存储

不同的云厂商对它有不同的英文缩写命名。例如阿里云把自家的对象存储服务叫做OSS,华为云叫OBS,腾讯云叫COS,七牛叫Kodo,百度叫BOS,网易叫NOS……五花八门,反正都是一个技术。


云计算K8s组件系列—- 容器运行时CRI

CRI就是kubelet 把对容器的操作,统一地抽象成一个接口。这样,kubelet 就只需要跟这个接口打交道了。而作为具体的容器项目,比如 Docker、 rkt、runV,它们就只需要自己提供一个该接口的实现,然后对 kubelet 暴露出 gRPC 服务即可。




云计算K8s系列---- K8s API

为了方便查阅 API 接口的详细定义,Kubernetes 使用了 swagger-ui 提供 API 在线查询功能,其官网为http://kubernetes.kansea.com/docs/reference/, Kubernetes开发团队会定期更新、生成 UI 及文档。

运行在 Master 节点上的 API Server 进程同时提供了 swagger-ui 的访问地址:http://: /swagger-ui/。假设我们的 API Server 安装在 192.168.1.128 服务器上,绑定了 8080 端口,则可以通过访问 http://192.168.1.128:8080/swagger-ui/ 来查看 API 信息。

Swagger UI 是一款 REST API 文档在线自动生成和功能测试软件,关于 Swagger 的内容请访问官网 http://swagger.io。


监控metrics系列---- K8s监控方案

一个完整的监控体系包括:采集数据、分析存储数据、展示数据、告警以及自动化处理、监控工具自身的安全机制。我们来看看使用prometheus进行kubernetes的容器监控。


架构系列---- 计数系统

很多业务都有“计数”需求,在业务复杂,计数扩展频繁,数据量大,并发量大的情况下,计数系统的架构演进与实践。


云计算安全系列---- 安全

在基于k8s做应用开发的时候,都是使用admin来使用k8s,基本不用去关注授权的问题。但是,当我们将k8s作为PaaS平台的容器编排引擎,并引入多租户时,就涉及到权限管理相关的问题了,paas平台的安全都是基于k8s的安全机制来实现的。


云计算容器系列---- Docker Principle

Docker实质上是汇集了linux容器(各种namespaces)、cgroups以及“叠加”类文件系统(changeroot)等多种核心技术的一种复合技术。



分布式系列---- Event And Distributed Event

事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。


架构系列---- 架构的演进

随着计算机软件的发展,不同的应用在落地,应用架构随着规模的越来越大,也在一步步的进行演进,从最初的单体架构,到后来的集群,然后分布式架构一步步的发展着。



架构系列---- 电商购物系统

电商购物系统算是目前软件技术落地的很大的一个发展方向,主要以阿里为主导的电商购物系统占据整个行业的半壁江山,是直接和价值挂钩的重要业务方向。


数据库redis系列---- redis zset

ZSet数据结构类似于Set结构,只是ZSet结构中,每个元素都会有一个分值,然后所有元素按照分值的大小进行排列,相当于是一个进行了排序的链表。


监控日志系列---- loki

Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签,为 Prometheus和 Kubernetes用户做了相关优化。项目受 Prometheus 启发,类似于 Prometheus 的日志系统。


监控metrics系列---- Prometheus Grok_exporter

grok_exporter是基于logstash的grok的插件开发的日志分析工具,可以分析非结构化日志根据正则表达式进行匹配,然后生成适合prometheus的规则规范的metrics。


监控metrics系列---- Prometheus mtail

mtail是一个可以从应用程序日志中提取指标,并将其导出到时间序列数据库或时间序列计算器中,以便配置警报和仪表盘的工具。

提取由定义了模式和动作的mtail程序来控制。


架构系列---- 架构解耦

自身服务的变动,需要其他依赖服务跟着升级变更,这就叫服务耦合,比如数据库换了一个ip,此时往往连接此数据库的上游需要修改配置重启,明明换ip的是你,凭什么配合重启的却是我?这就是一种典型的架构设计上“反向依赖”的问题。


架构系列---- 搜索系统

搜索系统在我们日常生活中经常使用,比如baidu,google等,我们来看看其架构和原理。


云计算系列---- PaaS

PaaS就是一个为应用提供自动化研发,部署,调度,运维的管理平台。



分布式系列---- 文件存储系统hdfs

Hadoop:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。


数据库redis系列---- redis tutorial

redis是一款高性能的key-value型数据库,目前受到了强烈的欢迎和广泛的使用。

先来一副比较牛逼的图,简直涵盖了所有


云计算K8s系列---- K8s Principle

很多的集群管理项目(比如 Yarn、Mesos,以及 Swarm)所擅长的,都是把一个容器,按照某种规则,放置在某个最佳节点上运行起来。这种功能,我们称为“调度”。

Kubernetes 项目所擅长的,是按照用户的意愿和整个系统的规则,使用声明式api,完全自动化地处理好容器之间的各种关系。这种功能,就是我们经常听到的一个概念:编排。

所以说,Kubernetes 项目的本质,是为用户提供一个具有普遍意义的容器编排工具。


数据库redis系列---- redis集群的原理

自从研究了redis的监控工具之后,对于redis的集群实现方案又回头做了一个系统的研究。

首先,先说一下redis,是一个高性能的key-value类型的NoSQL数据库,支持较为丰富的数据类型,单机Redis在普通的服务器上通常ops上限在5w左右,开启pipeline的情况下在20-30w左右。对于大多数中小公司来说,通常单机的Redis已经足够,最多根据不同业务分散到多台Redis。但是随着数据的越来越多,也迫切需求支持分布式集群。



架构系列---- 常用ID生成的方法

几乎所有的业务系统,都有生成一个记录标识的需求,全局唯一,趋势有序是记录标识生成的两大核心需求。


架构系列---- 调用优化

第三方接口挂掉,最好是不影响我们自身服务的运行,但是我们没有办法控制第三方接口稳定,所以我们需要优化我们的调用架构。



云计算CDCI系列---- jenkins

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件,Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。


Golang使用系列---- Gc

以下是Golang GC算法的里程碑:

v1.1 STW(停止所有运行时)
v1.3 Mark(标记) STW(停止所有运行时), Sweep(清除) 并行
v1.5 三色标记法
v1.8 三色标记法 + hybrid write barrier(混合屏障)

监控trace系列---- jaeger

Jaeger 是 Uber 开源的分布式追踪系统,兼容 OpenTracing 标准,于 2017 年 9 月加入 CNCF 基金会。


监控trace系列---- zipkin

zipkin是分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。



消息队列系列---- Kafka

Apache Kafka由著名职业社交公司LinkedIn开发,最初是被设计用来解决LinkedIn公司内部海量日志传输等问题。Kafka使用Scala语言编写,于2011年开源并进入Apache孵化器,2012年10月正式毕业,现在为Apache顶级项目。Kafka是一个分布式数据流平台,具有高吞吐、低延迟、高容错等特点。


架构系列---- 推荐系统

推荐系统主要依赖于算法,是将大数据进行分析后得到一个想要结果,进行评分推荐,其实和搜索系统有异曲同工之妙。


监控metrics系列---- Prometheus blackbox_exporter

blackbox主要是用这个探针去探测其他机器的网络情况,比如可以使用icmp协议来完成ping其他机器监控的任务,可以使用http协议来完成url探测的功能。


云计算CDCI系列---- harbor

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。harbor项目是由VMware中国研发的团队负责开发,所以对国内非常友好。


架构系列---- Cache

缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。


架构系列---- 冗余表

冗余表的架构设计就是牺牲空间一份数据存多张表,可以通过不同索引查询提高效率的一种架构思想。


Golang使用系列---- Runtime

尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime 类似 Java 和 .NET 语言所用到的虚拟机,它负责管理包括内存分配、垃圾回收、栈处理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。


监控metrics系列----VictoriaMetrics

VictoriaMetrics是一个高性能的,长期存储的prometheus的远程解决方案,实现集群使用的federation的方式,只不过性能很优秀,包括write和query,聚合数据也解决了查询问题。


监控metrics系列---- Cortex

crotex是一个为了支持prometheus扩展的服务,支持水平扩展,高可用,多租户,长期存储。主要开发者也是promehteus的开发者


架构系列---- 中台建设

中台建设其实就是将一些能够统一的业务进行统一规划,所以系统的接入和流出都是标准化的操作。



分布式系列---- Distributed config

配置信息就是程序加载时候需要设置的信息,一般我们可以通过在代码中设置,在配置文件中设置,在配置中心配置来设置我们需要的信息。


云计算数据库系列---- etcd-operator

etcd operator管理部署到Kubernetes的 etcd集群,并自动执行与操作etcd集群相关的任务(创建,销毁,调整,故障转移,滚动升级,备份还原)。


服务发现系列---- Zookeeper

zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务、名字服务、分布式同步、组服务等。就是提供高可用的数据管理、应用程序协调服务的分布式服务框架,基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,提供的功能包括:配置维护、统一命名服务、状态同步服务、集群管理等。


数据库mysql系列---- Mysql入门

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。



云计算K8s系列---- operator

Operator 是指一类基于 Kubernetes 自定义资源对象(CRD)和控制器(Controller)的云原生拓展服务,其中 CRD 定义了每个 operator 所创建和管理的自定义资源对象,Controller 则包含了管理这些对象所相关的运维逻辑代码。

其实operator和控制器是差不多,只不过operator是针对特定应用程序的控制器,比如数据库etcd,需要结合很多etcd的专业部署运维知识做逻辑处理。


监控metrics系列---- Prometheus gpu_exporter

随着区块链、人工智能的盛行,越来越多的场景开始使用GPU,而其监控也随之受到重视。目前生产环境中大部分GPU为NVIDIA厂商,今天就聊聊NVIDIA如何进行GPU的监控。



云计算K8s系列---- K8s Tutorial

kubernetes是一种容器管理开源项目,用于管理容器化的工作负载和服务,可促进声明式配置和自动化,支持容器自身的不足。

  • 解决了容器安全问题:密钥与配置管理
  • 容器管理:部署,升级回滚,扩缩容,自愈等。
  • 网络问题:服务发现和负载均衡


消息队列系列---- Rocketmq

RocketMQ 一个纯java、分布式、队列模型的开源消息中间件,是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。


Golang使用系列---- Concurrence

并发编程是我们计算机技术中最常用的一种编程技术,是一种基于多元程序的一种应用。


golang使用系列---- go基本使用积累

学习使用go语言已经有一段时间了,积累了很多的经验,这边进行不断接触的知识点进行零散的整理并持续积累,也便于后期的备忘。


监控metrics系列---- M3db

Uber开发了指标平台M3和分布式时间序列数据库M3DB。来解决Uber在发展过程当中遇到的问题:使用开源软件后,因为可靠性,成本等问题,在操做密集型方面没法大规模使用这些开源软件。因此Uber逐步构建了本身的指标平台。咱们利用经验来帮助咱们构建本地分布式时间序列数据库,高度动态和高性能的聚合服务,查询引擎以及其余支持基础架构。


算法思想系列---- Raft

Raft 实际上是一个一致性算法的一种实现,和Paxos等价,但是在实现上,简化了一些,并且更加易用。


Golang使用系列---- Map

map是我们经常使用的一种数据结构,也是很重要的一种数据结构,我们来详细的了解一下map。


Golang使用系列---- Sync

sync包提供了基本的同步基元,如锁,WaitGroup、Once 和 Cond等同步原语。除了Once和WaitGroup类型,大部分都是适用于普通程序线程,大型并发同步使用channel通信(csp)更好一些。


Golang使用系列---- mutex

锁是一种常见的并发控制技术,我们一般会将锁分成乐观锁和悲观锁,即乐观并发控制和悲观并发控制。



数据库系列---- Elasticsearch

开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。并且支持分布式,解决Lucene(支持全文索引的数据库系统)单机问题,目前维基百科、Stack Overflow、Github 都采用它。



监控metrics系列---- Prometheus Alertmanager

Alertmanager主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组,策略路由,是一款前卫的告警通知系统。






分布式系列---- 文件存储系统Fastdfs

fastdfs是一个开源的轻量级分布式文件系统,是纯C语言开发的。它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等,FastDFS 针对大量小文件存储有优势。


Golang使用系列---- Bufio

bufio 包实现了缓存IO。它包装了 io.Reader 和 io.Writer 对象,创建了另外的Reader和Writer对象,它们也实现了 io.Reader 和 io.Writer 接口,不过它们是有缓存的。该包同时为文本I/O提供了一些便利操作。


Golang使用系列---- Syscall

标准库syscall给这些系统调用做了不错的封装,不少常用的系统调用已经可以像普通函数一样直接调用,但是大部分使用起来都比较陌生。


分布式系列---- 文件存储系统glusterfs

GlusterFS (Gluster File System) 是一个开源的分布式文件系统,是 Scale-Out 存储解决方案 Gluster 的核心,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS 借助 TCP/IP 或 InfiniBand RDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据,基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。



监控系列---- 监控总纲

几乎所有的系统(我们通常都是APM:应用系统监控)都可以通过是三个方面来构建三维一体立体化监控体系。


计算机网络系列(十七)---- tc

流量控制(Traffic Control, tc)是Linux内核提供的流量限速、整形和策略控制机制。它以qdisc-class-filter的树形结构来实现对流量的分层控制。



监控系列---- trace

全链路监控系统 - APM(Application Performance Managemen)主要用于调用链路追踪,对每一次调用都做性能分析。



监控metrics系统---- Thanos

Thanos,一组通过跨集群联合、跨集群无限存储和全局查询为Prometheus 增加高可用性的组件。


云计算CDCI系列---- helm2

Helm 是 Deis (https://deis.com/) 开发的一个用于 kubernetes 的包管理器。每个包称为一个 Chart,一个 Chart 是一个目录(一般情况下会将目录进行打包压缩,形成 name-version.tgz 格式的单一文件,方便传输和存储),可以将 Helm 看作 Kubernetes 下的 apt-get/yum。




监控metrics系列---- Prometheus Nginx

nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server.关于nginx的介绍就不多谈了,这里主要聊下如何打造nginx集群的监控系统。


监控metrics系列---- prometheus监控方案

prometheus生态可以构建一个完整的监控平台,包括采集数据、分析存储数据、展示数据、告警等一系列操作,我们来看看他在原始的基础设施监控和新兴的容器监控中如何架构落地。


监控metrics系列---- Prometheus Operator

Prometheus-Operator是一套为了方便整合prometheus和kubernetes的开源方案,使用Prometheus-Operator可以非常简单的在kubernetes集群中部署Prometheus生态服务,用户能够使用简单的声明性配置来配置和管理Prometheus实例,这些配置将响应、创建、配置和管理Prometheus监控实例。


Golang使用系列---- Go Context

控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context,当然还可以简单的直接用channel通知。


云计算devops系列---- ops

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布、金丝雀发布和滚动发布等灰度发布策略,目的是尽可能避免因发布导致的流量丢失或服务不可用问题。


消息队列系列---- Mq Compare

消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法,用于上下游应用程序之间传递消息。




消息队列系列---- Rabbitmq

RabbitMQ是一个在AMQP(Advanced Message Queuing Protocol )基础上实现的,由Erlang开发,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。


消息队列系列---- Activemq

ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS规范(Java Message Service),是消息驱动中间件软件(MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。



架构系列---- 微服务

微服务其实就是服务化的一种概念,由过去单体架构演变成分布式系统的一个产物。


计算机网络系列---- Grpc

gRPC是一个高性能、通用的开源RPC框架,其由Google 2015年主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、电池寿命。


计算机网络系列(十三)---- rpc

RPC(Remote Procedure Call)是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。



Golang使用系列---- Bytes

该包定义了一些操作 byte slice 的便利操作。因为字符串可以表示为 []byte,因此,bytes 包定义的函数、方法等和 strings 包很类似,所以讲解时会和 strings 包类似甚至可以直接参考。




UML

UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。下面将对UML的九种图的基本概念进行介绍以及各个图的使用场景。


云计算平台系列---- rancher

Rancher是一个开源的企业级容器管理平台,Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。


消息队列系列---- Nsq

NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。可用于大规模系统中的实时消息服务,并且每天能够处理数亿(十亿)级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。

NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。


架构系列---- 并发安全

并发安全,就是多个并发体在同一段时间内访问同一个共享数据,共享数据能被正确处理。


监控metrics系列---- Zabbix基本使用

zabbix是目前各大互联网公司使用最广泛的开源监控之一,其历史最早可追溯到1998年,在业内拥有各种成熟的解决方案.


服务发现系列---- Etcd

ETCD是coreOS开源的用于共享配置和服务发现的分布式,一致性的KV存储系统。是一款类似于zk有望取代复杂的zk的用go语言开发的存储系统。


服务发现系列---- Consul

Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对。


服务发现系列---- Sd

服务发现就是程序如何通过一个标志来获取服务列表,并且这个服务列表是能够随着服务的状态而动态变更,最终得以调用到相应的服务。

服务发现是在分布式系统规模越来越大的情况下,服务治理的必然产物,不然服务的配置调用将难以维护。



Golang使用系列---- DesignPatterns

设计模式其实和语言关系不大,但是在项目工程的设计中有着很大的作用,这边使用golang实现相关的设计模式,也算是对过去看过用过的设计模式的回顾和总结。



Golang使用系列---- Strings

平时在开发过程中, 和字符串打交道还是比较多的,比如分割, 去除, 替换等等常用的方法, 这些都是由strings包来提供的。




Golang使用系列---- Go Net 协议层

网络编程是go语言使用的一个核心模块。golang的网络封装使用对于底层socket或者上层的http,甚至是web服务都很友好。


Golang使用系列---- Builtin

builtin包是go的预声明定义,包括go语言中常用的各种类型和方法声明,包括变量和常量两部分.


Golang使用系列---- Os

os包中实现了不依赖平台的操作系统函数接口(平台无关的接口),设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量,返回错误值而非错误码,可以包含更多信息。


Golang使用系列---- Fmt

fmt是实现了格式化的I/O函数,这点类似C语言中的printf和scanf,但是更加简单。


Golang使用系列---- flag

golang自身带的命令行包flag,各种case,有代码洁癖的人看着就令人头大,我们一般使用其他的命令行解析包比如pflag,cobra等,cobra是个非常不错的命令行包(golang命令行解析库),docker,hugo都在使用.



Golang使用系列---- Interface

在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。



golang使用系列---- Time

time包中包括两类时间:时间点(某一时刻)和时长(某一段时间)的基本操作。


监控metrics系列---- Zabbix监控方案

zabbix是目前各大互联网公司使用最广泛的开源监控之一,其历史最早可追溯到1998年,在业内拥有各种成熟的解决方案,但是对容器的监控还是比较薄弱,我们也不多说,主要用于基础设施VM的监控。


计算机网络系列(六)---- websocket

WebSocket不是HTTP协议,是基于http协议,HTTP只负责建立WebSocket连接,WebSocket连接相对于http 来说是一个长连接,解决了只能被动响应的问题。


计算机网络系列(四)---- udp

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。


分布式系列---- 文件存储系统nfs

NFS是Network File System的缩写,就是网络文件系统,主要功能是让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。


计算机网络系列(十一)---- tls/ssl

SSL:(Secure Socket Layer,安全套接字层)/TLS(Transport Layer Security) 传输层安全性协议,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。


计算机网络系列(九)---- rest

经常搞不清楚我们常说的HTTP API和Restful API是什么关系,HTTP API是Restful API的实现和表现,Restful API是HTTP API的基础,提供了标准接口和规范。



计算机网络系列(二)---- icmp

ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议,属于TCP/IP协议族,工作在网络层(第三层),用于在IP主机、路由器之间传递控制消息,主要用于主机探测,路由维护,路由选择,流量控制。


计算机网络系列(七)---- dns

DNS就是域名系统,是因特网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。


计算机网络系列(十四)---- connect

连接实际上是操作系统内核的一种数据结构,称为TCP控制块(TCB),对于linux而言是tcp_sock结构。不光连接,连数据包也是由一个数据结构来控制,linux里面称为sk_buff结构。完成三次握手就是连接,完成四次握手就是连接关闭。握手其实就是服务端和客户端都获取解析对方数据的方式(四元组是指source ip,source port,target ip,target port),放到对应的位置。这样两者就能一对一处理了,数据其实还是通过网卡传输的,但我只处理我认识的数据。这样比较好理解。


计算机网络系列(十)---- https

HTTPS实际上就是HTTP穿上了SSL/TLS的外套,我们都知道HTTP属于应用层的协议,是离程序员比较近的,而SSL(安全套接字)与TLS(运输层安全)都属于运输层协议。其实SSL与TLS都是上个世纪的产物,最新版本的TLS建立在SSL 3.0协议规范之上。


计算机网络系列(三)---- tcp

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。


计算机网络系列(一)---- Ip

IP(Internet Protocol , 互联网协议)主要用于互联网通信。IP协议用于将多个包交换网络连接起来,负责第三层网络层的通信(再往下就是二层链路层mac地址的通信),他是在源地址和目的地址之间传输数据报,还提供对数据大小的重新组装功能,以适应不同网络的要求。


c/c++系列---- Thread

多线程(英文:multithreading)多线程程序包含了可以并发运行的两个或更多个程序部分。


计算机网络系列(五)---- socket

我们在tcp/ip中提到,ip提供了地址,tcp封装了接口,最后构建socket编程接口,所以Socket 就是编程接口(API),是对 TCP/IP 的封装,对外提供的接口,屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信。





用hugo+github构建自己的blog

这个是我用hugo+github搭建起个人blog写的第一篇文章,有点小兴奋。。。首先把搭建测过程写起来和大家分享一下吧。

首先,作为一个程序员,不拥有自己搭建的blog,而去用别人搭建好的去注册一下,我是无法接受的!!搭建个人blog需要两个东西:

1、静态网页生成器,有jekyll,hexo,hugo等,由于最近在玩go语言,所以就选择了hugo,其他的也没有深入了解,后面搭建起来,发现hugo还是比较简单。

2、github pages 这个是github提供的一个托管工作,相当好用。