龙翔云际的实验室

龙翔云际欢迎你


零拷贝技术介绍

发布于:2020-04-01

为什么需要零拷贝 传统的Linux系统的标准I/O接口(read、write)是基于数据拷贝的,也就是数据都是copy_to_user或者copy_from_user 这样做的好处是,通过中间缓存的机制,减少磁盘I/O的操作,但是坏处也很明显,大量数据的拷贝,用户态和内核态的频繁切换,会消耗大量的CPU资源,严重影响数据传输的性能 以下是一个原始数据拷贝操作的例子,假如一个应用需要从某个磁盘文件中读取内容通过网络发出去,其过程需要经过以下4个步骤,整个过程涉及2次 CPU拷贝、2 次DMA拷贝总共4次拷贝,以及4次上下文切换。 read(file_fd, tmp_buf, len); …...

进入阅读

服务网格技术简介

发布于:2020-02-18

什么是服务网格 服务网格(Service Mesh)是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。 服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明,所有应用程序间的流量都会通过它,所以对应用程序流量的控制都可以在serivce mesh中实现。 使用服务网格有如下几个优点: 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可 对应用透明,Service …...

进入阅读

C语言标准和标准库简介

发布于:2020-02-07

C语言 C是一种通用的编程语言,广泛用于系统软件与应用软件的开发,它是由Dennis Ritchie与Ken Thompson于1969年至1973年间,为了移植与开发UNIX操作系统以B语言为基础,在贝尔实验室设计、开发出来。 ALGOL 60是计算机发展史上首批产生的高级程式语言,ALGOL 60语言基础上设计出了CPL,CPL基础上设计出BCPL,B语言便是简化BCPL后取首字母B命名而来。 由于B语言过于简单以及数据无类型的弊端,Dennis Ritchie和 Ken Thompson在B语言的基础上设计出了C语言,C语言更加精炼、也更加接近硬件。之后的UNIX操作系统便用C语言重构, …...

进入阅读

Kubernetes简介及环境搭建

发布于:2019-12-28

什么是Kubernetes Kubernetes是Google开源的容器集群管理系统,它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。 Kubernetes在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 Kubernetes功能概要 服务发现和负载均衡 Kubernetes可以使用DNS名称或自己的IP地址公开容器,如果到容器的流量很大,Kubernetes可以负载均衡并分配网络流量,从而使部署稳定。 存储编排 Kubernetes允许挂载多种存储系统,例如本地存储、公共云提供商等。 自动部署 …...

进入阅读

Go语言开发的顶级项目

发布于:2019-11-20

前言 自从10年前Google正式发布第一个版本的Go语言以来,Go语言的发展风风火火的走过10个年头,虽然现在仍然不能算是编程开发的王牌(于java、C、Pyhton相比),但是谁也不能忽视Go语言在如今编程领域的存在。 一个开发语言要想获得成功当然离不开自身的不带完善和优化,但是出色的顶级项目的出现也是激发更多人开始关注并且使用Go语言的重要原因,下面就来简单的盘点一下Go语言问世10周年以来那些由Go语言开发出来的赫赫有名的顶级项目,前半部分主要是国外友人的项目,最后几个是国人开发的项目。 Docker 官网地址:https://www.docker.com/ 官方文 …...

进入阅读

Elasticsearch架构简介

发布于:2019-10-05

ElasticSearch核心概念 Cluster—集群 一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能,一个集群由一个名字唯一的标识。 Node—节点 一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能,和集群类似,一个节点也是由一个名字唯一的标识。 Index—索引 索引包含的是一大推相似结构的文档数据,例如我们的商品索引,订单索引等,同集群和节点类型,一个索引也是由一个名字唯一的标识。 Type—类型 每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,如果不指定type的名称,默认 …...

进入阅读

Mac上修改打开文件最大数目的方法

发布于:2019-09-29

too many open files too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。 众所周知Mac系统是基于linux内核开发的,但是在使用上却有很多不同有liunx系统的操作,比如修改程序打开文件最大数目。出于系统安全的考虑,mac默认的程序打开的文件/socket连接数量超过系统设定值为256。由于一些特殊的研发场景,通常需 …...

进入阅读

流量复制技术

发布于:2019-09-20

为什么需要流量复制 对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbench、http_load为例,这些通过模拟请求的压测工具,只能发送特定的参数,对于一些参数异常导致的程序处理异常是无法考虑到的,所以就需要一款能复制真实流量,并且不影响线上业务的工具。 流量复制工具有很多,例如Gor、tcpreplay、tcpcopy等,这些工具贴合真实场景,能模拟真实流量,并支持流量的放大或缩小,更容易测试出程序的瓶颈和潜在问题。 常见的流量复制工具有如下几种: …...

进入阅读

yum安装Nginx

发布于:2019-09-20

通过yum安装Nginx 在centos中安装软件的方式通常使用yum install xxx的方式,但是当运行命令yum install nginx的时候通常会报No package nginx available.,原因是nginx位于第三方的yum源里面,而不在centos官方yum源里面。 解决的办法就是添加epel(Extra Packages for Enterprise Linux)源,下载并安装epel的方法如下: #centos 6 wget …...

进入阅读

go modules使用

发布于:2019-08-26

go modules机制 go modules是golang在1.11版本中作为实验性功能加入,并在1.12版本中将go modules纳入正式支持。go modules是一个新型的go包管理工具,用于解决go程序的包依赖问题。 在go modules出现之前,go程序的第三方包依赖管理一直是个头疼的问题,曾经出现过的包管理工具有govendor、dep、glide、godep等,这些包管理工具都是基于GOPATH或者vendor目录,并不能很好的解决不同版本依赖问题。go modules是在GOPATH之外一套新的包管理方式。 模块是相关Go包的集合。modules是源代码交换和版本控制的单 …...

进入阅读

Elasticsearch查询API使用

发布于:2019-07-30

Elasticsearch查询API简介 查询API 在Elasticsearch支持以如下几种Restful API对存储的文档进行查询: #不指定index的查询 GET /_search POST /_search #指定index的查询,其中<index>可以是特定的index名称,也可以是一组以逗号隔开的index列表,或者是符合*通配符的一系列索引index GET /<index>/_search POST /<index>/_search #指定index和type的查询,其中<type>可以是特定的type名称,也可以是一组以逗 …...

进入阅读

Docker网络和通信

发布于:2019-07-25

docker网络模式 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络,也就是在不使用–network参数时)、 none 、host。还有以后一种自定义模式,自定义模式有三种:bridge、overlay、macvlan。 host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 none:该模式关闭了容器的网络功能。 bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。 通过如下命令可以查看docker网 …...

进入阅读

Prometheus简介

发布于:2019-07-14

Prometheus简介及其发展历程 Prometheus是一套基于Go语言开发的开源系统监控和报警框架。 它启发于Google的borgmon监控系统,从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发。 2016年5月继Kubernetes之后成为第二个正式加入CNCF基金会的项目,同年6月正式发布1.0版本。 2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合。 Prometheus作为新一代的云原生监控系统,目前已经有超过650+位贡献者参与到Prometheus的研发工作上,并且超过120+项的第三方集成。 …...

进入阅读

使用Dockerfile来定制Docker镜像

发布于:2019-07-12

Dockerfile定制镜像 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令,Docker程序将读取Dockerfile,根据指令生成定制的image。 Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层, 因此每一条指令的内容,就是描述该层应当如何构建。 一般的,Dockerfile 分为四部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 Dockerfile示例 #基础镜像信息 FROM ubuntu # …...

进入阅读

分布式系统最终一致性理论——BASE

发布于:2019-06-20

BASE理论 BASE理论是Basically Available(基本可用),Soft State(软状态)和Eventually Consistent(最终一致性)三个短语的缩写,由eBay架构师提出的,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网分布式系统实践的总结,是基于CAP定律逐步演化而来。 其核心思想是即使无法做到强一致性,但每个应用都可以根据自身业务特点,才用适当的方式来使系统打到最终一致性 BASE思想的主要实现有: 按功能划分数据库 sharding碎片 基本可用(Basically Available) 基本可用是指分布式系统在出现故障的时候, …...

进入阅读

常见排序算法原理——Go语言实现

发布于:2019-06-17

冒泡排序——Bubble Sort 算法原理 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 package main import "fmt" func main() { arr := []int{1, 3, 45, 32, …...

进入阅读

分布式系统设计理论——CAP

发布于:2019-06-15

CAP定理 CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这三个基本需求,最多只能同时满足其中的2个。 CAP的具体定义: Consistency(一致性):指数据在多个副本之间能够保持一致的特性,一般特指写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为 v1。 Availability(可用性):指系统提供的服务必须一直处于可用的状 …...

进入阅读

面向对象设计模式概述

发布于:2019-06-08

什么是设计模式 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。 设计模式七大原则 开闭原则OCP(Open Close Principle) 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。 在设计一个模块的时候,应当对这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展。 为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在很多面向对象编程语言 …...

进入阅读

Kafka常用命令行使用简介

发布于:2019-04-16

kafka-server-start.sh命令 kafka-server-start.sh命令用于启动kafka服务。一般用法 启动kafka服务,其中必须传递的参数是服务的配置文件路径。 kafka-server-start.sh ../config/server.properties 一般启动服务需要以后台运行的模式,需要额外新增 -daemon参数 kafka-server-start.sh -daemon ../config/server.properties 此外还可以通过 –override参数覆盖设置server.properties的配置, …...

进入阅读

Docker Compose的使用

发布于:2019-04-12

Docker Compose Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成,使用Docker Compose不再需要使用shell脚本来启动容器。 Docker Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 Docker Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker …...

进入阅读

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)