运维平台架构设计及开发(持续更新中...)

开发环境: Python 2.x GoLang 1.6 Django 1.6 Bootstrap 3.0 JQuery1.8 架构: 模块介绍: Agent:使用GoLang开发,主要收集主机信息、执行下发任务、主机状态上报、服务检测等 Master:使用GoLang开发,接收Agent上报的信息,存储到MySQL Dashboard:使用Python Django开发,前台展示及管理。前端使用B......
Python 2019年01月26日 17:15:58

Go并发编程之Select(4)

Go的select功能和C中的select, poll, epoll类似,就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。 在某些场景下,我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。 使用 select 类似于 switch 语句,每个case会对应一个通道的通信(接收或发送)过程,但是它的 case 涉及到 channel 有关的 I/O 操作......
GoLang 2022年05月20日 21:33:17

Python协程之Gevent

Gevent是一个基于Greenlet实现的网络库,通过Greenlet实现协程。 基本思想是一个Greenlet就认为是一个协程,当一个Greenlet遇到IO操作的时候,比如:访问网络就会自动切换到其他的Greenlet等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程就保证总有Greenlet在运行,而不是等待I......
Python 2022年05月19日 10:21:12

浅析Python协程

我们在学习Python时候,协程( Coroutine )可能是最让初学者困惑的知识点之一了,它也是Python中实现并发编程的一种重要方式。Python中可以使用多线程和多进程来实现并发,对于计算型任务由于GIL的存在我们通常使用多进程来实现,而对于IO型任务我们可以通过线程调度来让线程在执行IO任务时让出GIL,从而实现表面上的并发。其实对于IO型任务我们还有一种选择就是协程,协程是运行在单线......
Python 2022年05月19日 10:08:29

Go语言中var、new、make区别

在Go语言中可以使用var来声明一个变量,并指明变量的数据类型。通过var声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。声明一个指针类型的变量,系统不会为他分配内存,默认是nil。 new 和 make 都是用来内存分配的,make只能用于内建类型(map、slice、channel)的内存分配和初始化。new只分配内存,可以是任意的数据类型。 从返回值上来说make返回的是引......
GoLang 2022年05月18日 22:26:21

Go并发编程之Goroutine和Channel(3)

一、前言概述 我们都知道软件运行的最小单位是进程,当一个应用程序启动时操作系统为其创建了一个进程,代码运行的最小单位是线程,我们写的代码片段在程序跑起来后一定是在一个线程中运行的,而这个线程是属于这个进程创建的。 我们常接触到的并发模型是多线程并发模型,而 Go 语言中的并发模型是 CSP 并发模型,简单介绍这两种并发模型: 1、多线程并发模型 多线程并发模型是在一个应用程序中同时存在多个执行流,......
GoLang 2022年05月18日 09:31:14

Go并发编程之Goroutine(1)

为了提高服务器的并发处理能力,编程模式从原来串行模式升级到并发模型,并发模型主要有IO多路复用、多进程、多线程等。为什么会演化出协程?比多线程又有那些优势?它们之间又有那些区别?我们将带着这些问题深入了解其背景。 一、串行、并行、并发、同步、异步 串行(serial):任务依次顺序执行与并行相对应,优点:由于任务在一个线程执行即不存在线程不安全情况,也就不存在临界区的问题。缺点:不能很好的利用多C......
GoLang 2022年05月17日 11:17:59

Go实现SSH-Server服务端(1)

1、 前言概述 Go有一个SSH库(golang.org/x/crypto/ssh)提供了丰富的接口,我们将基于此包实现SSH-Server服务端(SSHD)(也可实现SSH Client、SSH Proxy等),基于此包可实现SSH体系的扩展等。 2、 SSH架构 TCP传输层:建立TCP连接,后进行SSH协议处理 Handshake:SSH协议的数据传输(主要是提供数据加密传输) Authen......
GoLang 2022年05月07日 17:18:35

Go实现SSH-Client客户端(2)

上一篇我们实现了一个SSH-Server的服务,这篇我们实现SSH-Client。SSH的客户端常见有交互式 tty-bash 和命令执行,其中命令执行又分为交互式 command 和一般的 bash 命令,如tail、top等属于交互式命令,而 ls、who 等属于一般的 bash 执行。 1、交互方式 package main import ( log os golang.org/x/cryp......
GoLang 2022年05月07日 17:10:55

GoLang RPC 和 TLS 鉴权实现

实现 Go 语言远程过程调用(Remote Procedure Call, RPC),基于 Golang 标准库 net/rpc,同时基于 TLS/SSL 实现服务器端和客户端的单向鉴权、双向鉴权。 RPC 介绍 远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)......
GoLang 2021年10月25日 17:45:56

GoLang 中几种http请求方式

使用 net/http 包的函数 GET请求 import net/http ... resp, err := http.Get( http://wwww.ywfuns.com ) 利用http.client结构体来请求 import net/http ... clt := http.Client{} resp, err := clt.Get( http://wwww.ywfuns.com ) 使......
GoLang 2020年09月15日 15:13:21