摘要: Kafka Apache Kafka由著名职业社交公司LinkedIn开发,最初是被设计⽤来解决LinkedIn公司内部海量⽇志传 输等问题。Kafka使⽤Scala语⾔编写,于2011年开源并进⼊Apache孵化器,2012年10⽉正式毕业,现 在为Apache顶级项⽬。 介绍 Kafka是⼀个分 阅读全文
posted @ 2021-11-07 23:01 RandySun 阅读(148) 评论(0) 推荐(0) 编辑
摘要: ⽇志收集 项⽬背景 每个业务系统都有⽇志,当系统出现问题时,需要通过⽇志信息定位和解决问题。 当系统机器⽐较少 时,登陆到服务器上查看即可满⾜ 当系统机器规模巨⼤,登陆到机器上查看⼏乎不现实(分布式的系 统,⼀个系统部署在⼗⼏台机器上) 解决⽅案 把机器上的⽇志实时收集,统⼀的存储到中⼼系统。 在对 阅读全文
posted @ 2021-11-07 22:48 RandySun 阅读(90) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之WebSocket编程 webSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就 阅读全文
posted @ 2021-11-07 22:32 RandySun 阅读(1403) 评论(1) 推荐(0) 编辑
摘要: Go语言基础之HTTP编程 web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解 阅读全文
posted @ 2021-11-07 22:30 RandySun 阅读(228) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之TCP黏包 黏包示例 服务端: package main import ( "bufio" "fmt" "io" "net" ) func Process2(conn net.Conn) { defer conn.Close() reader := bufio.NewReader(co 阅读全文
posted @ 2021-11-07 22:29 RandySun 阅读(191) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之TCP编程 TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数 阅读全文
posted @ 2021-11-07 22:26 RandySun 阅读(240) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之UDP编程 UDP协议 UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时 阅读全文
posted @ 2021-11-07 22:24 RandySun 阅读(313) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之socket编程 Socket是BSD UNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。电脑上运行的应用程序通常通过”套 阅读全文
posted @ 2021-11-07 22:22 RandySun 阅读(989) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之互联网协议介绍 互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这些协议太过庞大和复杂,没有办法在这里一概而全,只能介绍一下我们日常开发中接触较多的几 阅读全文
posted @ 2021-11-07 22:20 RandySun 阅读(224) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之GMP原理与调度 一、Golang “调度器” 的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代” 一切的程序只能串行发 阅读全文
posted @ 2021-11-07 15:30 RandySun 阅读(288) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之Sync rsync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名 功能 (wg * WaitGroup) Add(delta int 阅读全文
posted @ 2021-11-07 15:28 RandySun 阅读(464) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之原子操作(atomic包) 原子操作 代码中的加锁操作因为涉及内核态的上下文切换会比较耗时、代价比较高。针对基本数据类型我们还可以使用原子操作来保证并发安全,因为原子操作是Go语言提供的方法它在用户态就可以完成,因此性能比加锁操作更好。Go语言中原子操作由内置的标准库sync/atom 阅读全文
posted @ 2021-11-07 15:28 RandySun 阅读(427) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之并发安全和锁 有时候在Go代码中可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。类比现实生活中的例子有十字路口被各个方向的的汽车竞争;还有火车上的卫生间被车厢里的人竞争。 举个例子: var x int64 var wg sync.Wai 阅读全文
posted @ 2021-11-07 15:27 RandySun 阅读(115) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之select select多路复用 在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。你也许会写出如下代码使用遍历的方式来实现: for{ // 尝试从ch1接收值 data, ok :=<-ch1 // 尝试从ch2接收值 data, o 阅读全文
posted @ 2021-11-07 15:26 RandySun 阅读(259) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之goroutine池 简易的work pool func worker(id int, jobs<-chan int, results chan<- int) { for j := range jobs { fmt.Printf("worker:%d start job:%d\n", 阅读全文
posted @ 2021-11-07 15:25 RandySun 阅读(145) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之channel(信道) 什么是信道? 信道可以想像成 **Go 协程之间通信的管道。**如同管道中的水会从一端流到另一端,通过使用信道,数据也可以从一端发送,在另一端接收 信道的定义,就是一个变量(特殊),两个协程之间通信,传递什么类型(int,bool) 单纯地将函数并发执行是没有意 阅读全文
posted @ 2021-11-07 15:23 RandySun 阅读(452) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之runtime包 runtime.Gosched() 让出CPU时间片,重新等待安排任务(大概意思就是本来计划的好好的周末出去烧烤,但是你妈让你去相亲,两种情况第一就是你相亲速度非常快,见面就黄不耽误你继续烧烤,第二种情况就是你相亲速度特别慢,见面就是你侬我侬的,耽误了烧烤,但是还馋就 阅读全文
posted @ 2021-11-07 15:09 RandySun 阅读(353) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之Goroutine 在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这 阅读全文
posted @ 2021-11-07 15:07 RandySun 阅读(296) 评论(0) 推荐(0) 编辑
摘要: Go语言基础之并发介绍 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行,多 阅读全文
posted @ 2021-11-07 15:06 RandySun 阅读(98) 评论(0) 推荐(0) 编辑