其他

深入理解Go语言(03):scheduler调度器 – 基本介绍

一:什么是调度 平常我们在生活中会有哪些调度的例子呢?比如十字路口的红绿灯,它就是一种调度系统。在交通十字路口,每个路口上多多少少有一些车辆,为了限制这些车辆不随意行驶,就建起了红绿灯调度系统。红绿灯可以有序的调度这些车辆行驶,使这些车辆快速的通过路口。 那为什么需要红绿灯来进行调度呢? 1:使车辆有序的行驶不至于相撞 2:使车辆能快速的通过路口 上面的红绿灯系统有哪些元素呢?1. 红绿灯系统-负责调度车辆 2. 车辆 3. 十字路口 由此我们可以看出一个调度系统基本元素有2个:1. 调度系统 2. 被调度的东西 3. 应用的资源 因为资源(十字路口)是有限的,每个方向只有一条路可供车辆行..…

Linux进程: task_struct结构体成员

一:简介 为了管理进程,内核必须对每个进程所做的事情进行清除的描叙。 比如:内核必须知道进程优先级,他是正在CPU上运行还是因为某些事件被阻塞了,给它分配了什么样的地址空间,允许它访问哪个文件等等。 这就是进程描述符(process descriptor)的作用,进程描述符都是task_struct类型的结构,它里面的字段包含了与一个进程相关的所有信息。每一个进程都要有一个task_struct数据结构。 在Linux中 进程(process)和 任务(task) 是同一个意思。 研究 Linux版本为 2.6.38.8 二:task_struct 结构体成员 task_stru...

微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习

一、技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景。 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等。 像这种大规模的应用,我们每点击一下鼠标,搜索一个关键字,背后可能会有几百台服务器上的N个服务来为我们提供服务。 我们用谷歌搜索:分布式 3 个字,搜索一些文章来学习分布式的知识。假如,查询时结果返回耗时 5 秒之多。 作为用户的你,等待这么长时间才返回结果,心里肯定不满意。 那作为一项服务来说,公司为了更好的服务用户,让用户满意,就必须要缩短用户等待返回查询结果的时间...

golang常用库包:Go依赖注入(DI)工具-wire使用

google 出品的依赖注入库 wire:https://github.com/google/wire 什么是依赖注入 依赖注入 ,英文全名是 dependency injection,简写为 DI。 百科解释: 依赖注入是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。 在用编程语言编写程序时,比如用 java 语言,会编写很多类,这些类之间相互调用,完成一个具体的功能。 例如,从 MySQL 获取数据,那么需要一个 MySQL 操作类 。 第一次编写mysql操作类: [crayon-68a9fe5bd4dc1310443186...

云原生概览

从云计算到微服务再到云原生发展历程 见下图 (来自:https://jimmysong.io/kubernetes-handbook/cloud-native/kubernetes-and-cloud-native-app-overview.html) 云计算: 云计算是一种配置资源的方式,根据资源配置不同,把云计算分成下面3种类型: lasS:基础设施即服务。比如亚马逊的EC2、S3存储。 PaaS:平台及服务。工具和服务的集合。快速构建自己的应用服务而不必关系底层的硬件设施。厂家有:Cloud Foundry、Heroku等 SaaS:软件即服务。终端可以直接使用的应用程序。...

WebSocket 协议详解

一、WebSocket 协议背景 早期,在网站上推送消息给用户,只能通过轮询的方式或 Comet 技术。轮询就是浏览器每隔几秒钟向服务端发送 HTTP 请求,然后服务端返回消息给客户端。 这种方式的缺点: 需要不断的向服务端发送 HTTP 请求,这种就比较浪费带宽资源。而且发送 HTTP 请求只能由客户端发起,这也是早期 HTTP1.0/1.1 协议的一个缺点。它做不到由服务端向客户端发起请求。 为了能实现客户端和服务端的双向通信,经过多年发展于是 WebSocket 协议在 2008 年就诞生了。 它最初是在 H...

对进程、线程和协程的理解以及它们的区别

一、进程 先来了解一下操作系统的进程: 操作系统对正在运行程序的抽象,这个就是进程(process)。 比如运行一个 web 浏览器,一个 text 文本,都是运行的一个一个进程。 有的人说:进程是程序运行资源的集合。进程是系统资源分配的最小单位等等。 从静态的角度来说,进程确实是运行程序的各种资源集合。 如果你进一步思考,进程里的各种资源都有哪些呢?如下图所示: (图1:进程资源) 内存管理相关 文件系统 调度相关 信号处理 内核栈 进程各种状态 进程运行时统计信息 进程标识 等等。 可以看出,进程中的资源是相当多的。 从 Linux 操作系统对进程的定义也可以看出。我以前对进程结构 tas…

服务治理:常用限流算法总结

服务治理:常用限流算法总结 一、为什么会有限流 限流,看字面意思,限制流动。 为什么要限制流动? 比如高速公路出现了事故,交警会对高速路车辆的进入进行指挥和限制。 发生了一些意外情况,才可能要限制流动。等恢复正常情况后,就解除限制。不可能无缘无故的限制流动,毕竟限制会影响正常系统运行。 在举一个例子: 足球馆看足球比赛,足球馆的场地大小是固定的,座位数是固定的,能容纳看球人数总量是有限的。如果超过足球馆容量最大承载,会导致场内拥挤,这样会发生2个问题:一个是导致大家行动不便,一个可能会发生意想不到的事故。 那怎么办?球票。 一个足球场出售的球票是有限制的,一共卖多少张票是有一定数...

服务治理:几种开源限流算法库/应用软件介绍和使用

一、Go time/rate 限流器 1.1 简介 Go 在 x 标准库,即 golang.org/x/time/rate 里自带了一个限流器,这个限流器是基于令牌桶算法(token bucket)实现的。 在上一篇文章讲了几种限流算法,里面就有令牌桶算法,具体可以看上篇文章介绍。 1.2 rate/time 限流构造器 这个限流构造器就是生成 token,供后面使用。 Limiter struct 结构: 限流器构造方法:func NewLimiter(r Limit, b int) *Limiter: r :产...

碎碎念软件研发01:敏捷简史和几种软件开发模型

一、敏捷开发简史 敏捷简史 1975-2010: 1957年,增量软件开发方法出现。 1975年,Fred Brooks 提出“No Silver Bullet”,出版《人月神话》,相关概念和内容已与敏捷方法极其类似。 1986年,竹内弘高和 野中郁次郎在New New Product Development Game文章首次提到将Scrum应用与产品开发。 1993年,Jeff Sutherland在Easel公司首次将Scrum方法用于软件开发。 1995年,在OOPSLA‘95 会议上,Sutherland和Schwaber共同发表论文介绍Scrum方法。 1996年,Martin Fo…

碎碎念软件研发02:敏捷之Scrum

一、什么是 Scrum 1.1 Scrum 定义 Scrum 是敏捷开发方法之一,它使用比较广泛。 敏捷的其它开发方法还有 XP(极限编程)、FDD(特性驱动开发)、Crystal(水晶方法)、TDD(测试驱动开发)、DSDM(动态系统开发)等等敏捷方法。 Scrum-Guide 中定义的 Scrum: Scrum 是一个开发和维护产品的框架,它通过提供针对复杂问题的自适应解决方案来帮助人们、团队和组织创造价值。 Scrum 需要 Scrum Mater 营造一个环境: 一名 Product Owner 将解决复杂问题所需要的工作整理成一份 Product Backlog。 Scrum Tea…