自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 敏捷 & DevOps & Drone CI

CI/CD对开发团队的重要性软件开发是是一个复杂的工业化流程,编码只是其中的一部分,CI/CD 使得开发流程更加标准化、专业化、自动化和更加稳定,可以在开发过程中提早发现问题,从而提高开发效率,节省大量时间,一个好的CI/CD流程可以大大提高了软件的价值。CI/CD尤其对追求持续快速响应变化,持续迭代的敏捷开发中流程尤为重要。CI/CD的技术选型技术选型对于一个产品一个团队来说至关重要...

2019-08-06 18:31:47 408

原创 Tekton随笔

Tekton 介绍CI/CD在代码开发部署中占据很重要的地位,也是微服务系统快速集成快速部署的关键,当然也是云原生生态中不可缺少的组成部分。k8s是目前最流行的云原生系统核心,把代码发布到k8s是目前主流的CI/CD系统必备功能。如果一个CI/CD系统能完全利用k8s系统特性,如在k8s群集运行,借助k8s CRD定义CI/CD pipline task step等资源描述那就是极好的。于是就有了Tekton pipeline,Tekton就是完全依赖k8s环境,k8s原生的CI/CD 系统,可以说是k8

2020-10-16 10:22:57 187

原创 K3s学习

通过Kine这个包实现一个数据存储垫片(代理),使得其他数据库拥有etcd功能,K3s默认采用sqllite。k3s 是一个轻量级 Kubernetes,对k8s做了减法,去掉了非必要的不稳定的组件,关注核心功能。k3s主要应用场景是,边缘计算,可以结合物联网技术。重新定义了群集结构采用server和agent方式。通过NewAPIProxy加一个自定义的LoadBalancer,调用k8s 代码定义的kube api。通过tunnel使用代理wss协议进行节点间的相互连接。k3s将重点放在引入

2020-10-15 15:21:21 489

原创 基于ETCD的Kubernetes基本原理解析

ETCD概念ETCD是一种高可用的键值对类型的数据库,提供可靠的分布式的状态存储,可以配置多节点群集,群集之间做数据同步来保证数据可靠性,当一台因为故障挂点,会从剩余的节点通过选举算法选举出一个几点来代替故障节点,从而实现高可用性。ETCD与Kubernetes的关系ETCD为Kubernetes提供了可靠的数据存储机制,和基于watch机制的订阅发布机制,实现了核心数据的存储,和核心的基于watch-list的informer机制,当ETCD数据变化通过watch机制触发相应的核心操作,如pod创建

2020-09-21 17:56:53 481 1

原创 WEB 开发缓存策略介绍

引子web页面在服务器端进行渲染,需要根据模板和数据库数据经过运算生成和渲染出最终的页面,这些运算和渲染过程会耗费大量时间和资源,如果将这些运算结果缓存起来放在内存中,下次再请求页面就会直接从缓存中直接读取数据,节省了页面渲染计算时间,从而大大提高了页面的相应速度。目前内存价格相对便宜,通过缓存带来性能方面的收益往往比单纯从代码层面优化性能,高效的和经济实惠的多。什么是缓存什么是缓存,缓存其实也是一种代理,作为网站内容展示的代理,用户直接访问缓存内容,而缓存内容来源于后端程序计算, 缓存实际为一个中间

2020-09-21 17:54:54 172

原创 微服务随笔

程序不仅仅包括代码本身,还包括整个代码的运行环境,如构建的可运行镜像docker环境,包含程序所依赖各种服务的k8s部署整体定义,所依赖的CI/CD环境。不但有代码而且要有一个快速部署环境的定义,使得程序不仅仅是静态的代码而是一个可以快速部署的动态的服务。有效的拆分逻辑(应用),是软件开发中关键的问题(可维护性前提)。软件开发一直在解决程序的解耦问题,从函数,到类,到类库、组件、包,再到动态层级的微服务。微服务并不是一个新的概念,只是之前由于没有很好的技术和工具,实现成本太高而没有普及,随着容器技术、C

2020-09-21 17:52:04 79

原创 Service Mesh简介

什么是Service MeshService Mesh被译作服务网格,实质是一种网络代理服务。网络代理代理就是中介,可以对请求进行拦截修改,最简单的例子就是电信运营商在流量中插入广告。Service Mesh 可以看做是传统代理的升级版,用来解决现在微服务框架中出现的问题(网络相关),可以把 Service Mesh 看做是分布式的微服务代理。传统意义的代理的主体更强调底层网络数据,而Service Mesh 等强调程序级别的api级别的通用功能,和业务逻辑有一定关心,是以应用(服务)为具体核心服务对

2020-09-21 17:50:40 316

原创 轻量级日志收集工具Filebeat

引言日志对于程序非常重要,日志对于定位问题,数据分析有着十分强大的作用,是程序员和运维人员重要的工具。线上90%以上Bug都是依靠程序日志输出定位到。日志存储选择日志数据是一种时序数据,是一种记录当前时刻的状态的数据,只是做数据的追加,不做修改,定期删除,日志数据互相之间没有直接依赖关系,同时数据量巨大,根据这些特点logs要能被快速低成本存储,快速查询分析。如果采用关系型数据库存储查询,成本会非常高,并且关系数据库对于巨额数据查询分析显得不那么给力,所以如果没有非常特殊的要求,不会选择用关系型数据

2020-09-21 17:48:26 696

原创 ETCD原理和基本实现

什么是 ETCD官方定义为:Distributed reliable key-value store for the most critical data of a distributed system简单直直译对就是:分布式系统中最关键的数据进行可靠的键值存储ETCD 名字含义/etc 是linux 操作系统的配置存储目录, d durtubute 分布式缩写,简单理解为分布式配置数据库。ETCD 特性和应用场景ETCD主要为了存储系统关键配置数据,配置数据很少修改,符合读多写少特性,根据此特

2020-09-21 17:46:32 279

原创 Elasticsearch随笔

什么是ElasticSearch官方定义是ElasticSearch是一个基于Lucene library的分布式搜索引擎。ElasticSearch的开发者Shay Banon,最开始创建ElasticSearch的目的就是提供一个分布式的搜索解决方案。随着ES的发展,ES功能越来越丰富,ES应用越来越广泛,ES在很多场景下实际被作为一种数据库存储方案,实现数据库存储功能,将其理解为带有强大搜索功能和快速读取功能的高可用分布式文档型非关系型数据库(nosql)更为全面,非关系型数据库有很多种,采用ES作

2020-09-21 17:45:05 124

原创 Jaeger入门简介

Jaeger主要用于监视和诊断基于微服务的分布式系统,包括: 分布式上下文传播、分布式事务监控、根本原因分析、服务依赖性分析、性能/延迟优化。用于程序间(服务间)轨迹追踪、行为追踪、调用关系追踪。Logging主要是记录当前点离散事件(文本型描述数据),Metrics主要是记录当前点数值(度量值),Logging、Metrics只是对当前系统状况的离散记录,而tracing是对过程的一个记录,一个用户请求会调用多个服务,tracing用于记录这个过程中每一步的log Metrics数据(如 事件内容 执行

2020-09-21 17:39:40 780

原创 NSQ消息队列

异步任务与消息队列同步任务:一定要等任务执行完了,得到结果,才执行下一个任务。异步任务:不用等任务执行完,直接执行下一个任务。异步任务最简单可以用异步线程实现,golang 中可以用goroutine实现,但受时间和不确定因素限制,进程有可能超时、退出或者被杀死,消息队列可以定义任何时间的延迟,几天都可以。异步线程、goroutine只是单机的实现,消息队列是分布式的,可以跨语言夸系统。消息队列是独立的,跨线程概念的,实现跨主机的分布式并发。消息队列实现分布式的异步任务,利用分布式架构,实现可扩展性

2020-09-21 17:36:05 465

原创 Go语言特性介绍

采用goroutine的方式使多线程编写更加容易、代码可读性更好,可以简单理解为订阅者发布者模式,设计类似于unix管道通信模式, 对于消息队列编程有了解的话很容易理解goroutine的处理模式。能直接编译成二进制文件没有第三方依赖,因为go是静态编译,包含自己runtime,相对于c会大一些, 但相对java 这种依赖虚拟器的语言编译后的文件小的多。对于docker环境更小的镜像意味着更快的...

2019-12-19 09:20:50 120

原创 Drone 源代码调试

进入菜单 run/edit configurationRun kind 选择 directorycmd/drone-server 中用了wire这个处理依赖反转的包,有和main同级的文件依赖, 所以要采用运行目录的方式才能启动,否则会出现找不到InitializeApplication方法的错误。3.添加环境变量点击environment 旁边的文件夹小图标,可以添加环...

2019-08-22 16:13:02 340

原创 Drone CI 源代码走读

开篇使用开源工具的好处是,可以通过阅读源代码,深入了解工具的运行原理,可以更好的使用和掌握工具,遇到问题能更好的定位。阅读源代码,往往比阅读文档更加高效,尤其在遇到复杂的问题,代码才是最好的文档。drone是用golang开发的,golang本身入门简单,方便掌握,golang本身更强调工程实用性,golang写出的代码相对更直接,好理解。Drone代码量不是很多,结构很清晰,如果对Dron...

2019-08-22 16:12:09 647

原创 Drone CI 与 Harbor

相对于采用公共的镜像仓库,使用私有镜像仓库,可以部署在内网中,利用内网的安全防护如防火墙等,更安全更高效,方便内部控制。Harbor 是一个企业级可以应用于生产环境的镜像仓库。Harbor 是由VMware的中国区研发中心创建的,主力开发都是中国人,很多国内公司都在使用。优点高效的docker文件分层传输,提供高效的镜像上传下载提供镜像安全性扫描,漏洞扫描功能提供易于操作的用...

2019-08-22 16:11:08 1133

原创 Drone 基本原理和流程

本文将用简单的方法介绍Drone的基本流程,给大家提供一个整体的概念,不做深入展开,后续文章会对各种细节从原理和代码角度深入研究。Drone webhook 触发方式Drone 整个buid流程是由scm(源代码管理工具)触发的,是由scm采用webhook的方式来触发执行的,什么是webhook,webhook基本原理是什么:webhook与异步编程中"订阅-发布模型"非常类似,一端...

2019-08-12 17:05:11 5318

原创 面向对象设计实践指南 读书笔记

OO designOO viewModeling the world as a series of messages that pass between objects.1章 面向对象设计目的设计的目的是为了应付变化,易于扩展。减少对象之间的依赖。单一职责(合理分工)。高内聚低耦合。各种对象(模块)相互合作共同组成以一个整体,形成一个应用。艺术性设计是一门艺术,编排代码的艺术(强调艺术性)。 按今

2016-12-23 15:15:48 417

原创 rails源码分析之rack and rails

对于Rails3.0以上的版本,可以这样简单理解,Rails基于rack,可以说是对rack的扩展,定义了相关middleware,定义了相关的application.。所以要理解rails必须要了解rack,rack相当于为多种web服务器,如thin,webrick提供了一个简单的handler,基于rack的web程序,只需要针对rack提供一种接口,rack屏蔽了相关web服务器的差异,使

2014-01-08 11:03:04 1265

原创 rails源码分析之Controller

通过rails s命令启动web服务,实际是封装和调用了rack的相关方法,调用config.ru启动app。#This file is used by Rack-based servers to start the application.require::File.expand_path('../config/environment', __FILE__)runDe

2014-01-08 10:43:54 1060

原创 [Openstack]client api源码学习

Openstack提供了一个rest形式的web api接口供外部用户调用,为了方便对他的使用,openstack提供了一个可以被python直接调用的封装过的官方client api(如novaclient,glanceclient),在openstack的项目中,一些跨项目的服务的调用就是使用client api,在安装openstack时这些api必须要被安装的。      各个clie

2013-05-23 10:25:22 2616

原创 [openstack][G版]keystone源码学习

Keystone项目的主要目的是给整个openstack的各个组件(项目)提供一个统一的验证方式。用户管理,身份验证是几乎所有的软件管理都要处理的问题,Keystone对于通常的应用场景所不同的是他要解决分布式环境下的统一认证。       Keystone的程序结构也是采用openstack通常所用的manager,driver方式,这中方式的一个好处是driver可以被灵活的替换,通过

2013-05-22 10:59:25 2694 1

原创 Openstack G版Cinder源码分析

Cinder项目主要是为openstack提供块存储的的功能。Openstack中的实例是不能持久化的,需要挂载volume,在volume中实现持久化。Cinder就是提供对volume实际需要的存储块单元(简单理解:存储空间)的实现管理功能。       Cinder的服务主要有cinder-volume,cinder-backup,cinder-scheduler,还有一个api服务,并

2013-05-18 12:21:45 1771

原创 django class-based views介绍与分析

class-based views是django从1.3版本引入的一种新的特性,就是使用类的形式来描述view。class-based views对django带来的不只是编程方法的改变,而是程序设计哲学的改变。Django在最开始的设计的时候利用函数的方式来实现view,这种方式也是利用了python的动态语言特性,可以说是python’s 的编程方式。现在引入了class-based view

2013-05-16 18:36:35 2653

原创 openstack G版孵化项目Heat介绍

Openstack 对应于云计算的概念,是实现了IaaS(Infrastructure as a Service),即基础设施即服务,提供对云的基础设施运行环境的管理。有了基础设施就可以在其上部署和运行相关的应用,如web群集,paas,数据库等等相关的服务和应用。对于这些软件运行环境的构建需要进行相关的部署过程,当然部署的过程可以手工的完成,但是面对于快速构建应用的普遍需求来说,手工部署并不能满

2013-05-16 10:04:48 5267 2

原创 openstack g版 glance 源码分析

Glance主要任务是对openstack的所有镜像相关数据,进行相关的管理工作,是一个镜像数据管理中心。Glance实现的功能主要有镜像管理,和缓存管理,和一些辅助的工具。我在前边的文章中对他的缓存机制有一个简单的介绍,这里就主要介绍一下他的其他功能。      存储管理的核心代码主要在glance-master/ glance/store下,glance实现了多种方式的数据后台存储,如

2013-05-15 11:04:00 1935 1

原创 python定时任务运行框架APScheduler解析

对于定时任务我想大家都不陌生,简单的讲就是预先定义好在约定的时间执行约定的任务。这在程序开发中是一个很常用的功能在java 中可以使用Quartz,在.Net中也有对应的实现,而在python中对应的实现就是APScheduler。     利用APScheduler,可以实现给定的日期时间,固定间隔时间,以及crontab类型的任务。这里解释一下cron,cron就是在Linux下使用的

2013-05-14 14:58:37 4928

原创 Openstack 用Host aggregates实现灵活的调度策略

Openstack 对于主机的分布区域的划分主要方式主要有Zones,region,以及在g版新引入的概念cell。这些方式将主机进行了不同的化分。这些概念网上都有介绍这里我就不介绍了,感兴趣的朋友可以去网上搜一下。我在这里主要介绍一种逻辑划分方式Host aggregates。     Host aggregates 是对于availability zone的进一步的细分,availabil

2013-05-13 18:21:58 1144

原创 openstack Glance的镜像缓存机制介绍

我在前边的文章中曾经提到过,nova中的镜像缓存,现在来探讨一下Glance的镜像缓存,两者的目的和方法都是不一样的。      大家都知道Glance中的镜像文件不管用什么样的方式存储,都是存储在server端,用户在创建实例的前要先从server端获取相应镜像,再到本地根据配置进行相关的处理。有些镜像文件非常的大,在从服务端传到客户端要花费大量的时间,使实例的启动变得非常慢,对于一些特定的

2013-05-11 10:04:51 3573 2

原创 基于openstack的自动化测试平台设计头脑风暴

1.记录每个用例执行的时间,内存使用情况,cpu使用情况,可以为性能测试提供帮助(可以通过监控软件或者写程序获得,时间是最重要的,还要考虑监控数据的传输问题)。2.采用多任务中心的方式可以避免单节点故障,同时便于管理,可以有不同形式的分支代码任务中心支持不同的组。(通过ip来定位虚拟机,内部ip还是外部ip这需要测试,或者可以定义两者的映射关系)3.记录每个实例最后获取test的时间可以帮

2013-05-11 09:22:18 884

原创 openstack 体系结构随笔

以下是我对Openstack的一些自我认识和感想。     Openstack看起来很神秘很牛b,但是可以将其进行简单的理解。Openstack其实主要就是一个虚拟机群集管理软件(不考虑Baremetal,其实他也可以管理物理机),管理虚拟机的创建停止等生命周期全过程,制定虚拟机的分配策略(虚拟机如何选择要运行的物理机),进行虚拟机的迁移,分配管理网络,对创建虚拟机的镜像进行统一管理,还有一套

2013-05-11 09:17:38 1236

原创 openstack horizon源代码解析(一)

HorizonSite类代表整个网站,是整个程序结构的集合体。其中HorizonSite类继承自Site类通过类变量实现单件模式,产生全局单一的变量。Site类为一个Container,里边包含dashbord的相关方法,dashboard的注册解析,panel的注册方法,处理各个dashboard目录下的panel的url结构的解析,dashboard,panel相关目录的模块载入,网站的初始化

2013-05-11 09:15:30 2983

原创 Openstack G版 Baremetal

Openstack G版中有一个很有意思的特性就是Baremetal。简单的理解就是裸机部署,使openstack同机器的硬件直接进行交互,将一个物理机看做一个实例,也就是可以通过glance直接将一个img部署到一个没有装操作系统的裸机上。这个特性很令人振奋,使openstack不仅仅停留在虚拟机管理的概念上,而是可以直接管理物理机。     Baremetal中主要用到的技术是PXE技术(

2013-05-11 09:13:12 811

原创 Openstack中的api类型

在openstack中不管程序内部之间的调用还是,对于openstack中的各种服务的和功能的内部调用,还是外部调用都是通过api的形式来进行的。这里分析一下openstack中的几种常见api类型。     第一种是程序内部的api主要是给本机程序内部使用,如nova_master/nova/compute/api.py文件中的api class主要是为了给manager去调用,其中调用哪个

2013-05-11 09:10:48 1035

原创 openstack G版源码分析

Nova在整个openstack中是代码最多的一部分也是最复杂的一部分。如果对这部分代码和架构有比较深的理解,就可以说对整个openstack的程序架构有了一个比较深的理解,这里将分步骤的进行相关的讲解,这一章先从一些核心的概念讲起。      先提一下几个在openstack中非常重要的基本概念Server,Manager,Driver。Server顾名思义就是服务,openstack的各种

2013-05-11 09:05:55 825

原创 openstack Nova镜像处理机制及缓存机制探讨

实例的实际创建过程是通过调用libvirt函数来完成,在virt/Libvirt/driver.py中spawn方法来完成真正的虚拟机创建过程。 1 def spawn(self, context, instance, image_meta, injected_files, 2 admin_password, network_info=None, bl

2013-05-11 06:38:08 1656

空空如也

空空如也

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

TA关注的人

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