OPA 重新定义规则引擎

Posted by 夏泽民

https://gocn.vip/topics/10055 OPA,全称OpenPolicyAgent, 底层用Go实现,它灵活而强大的声明式语言全面支持通用策略定义。



log

Posted by 夏泽民

https://semaphoreci.com/community/tutorials/building-and-testing-a-rest-api-in-go-with-gorilla-mux-and-postgresql https://segmentfault.com/a/1190000022106356 依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。



IO 多路复用

Posted by 夏泽民

https://gocn.vip/topics/10090 什么是 IO 多路复用 IO 多路复用解决什么问题 目前有哪些 IO 多路复用的方案 具体怎么用 不同 IO 多路复用方案优缺点

  1. 什么是 IO 多路复用 一句话解释:单线程或单进程同时监测若干个文件描述符是否可以执行 IO 操作的能力。
  2. 解决什么问题 说在前头 应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标的输入、中断信号等等事件,再比如 web 服务器如 nginx,需要同时处理来来自 N 个客户端的事件。


go 语言是如何运行的-内存分配

Posted by 夏泽民

https://gocn.vip/topics/10078 在上文中,我们介绍了,从虚拟内存的角度,程序内存大致可以分为 5 个段text、data、bss、stack、heap 其中text段用于程序指令、文字、静态常量 data与bss段用于存储全局变量 stack段用于存储函数调用与函数内的变量,stack段的数据可以被 CPU 快速访问,stack段的大小在运行时是不能增加和减少的,销毁只是通过栈指针的移动来实现的。同时,这也是为什么程序有时候会报错 stack overflow 的原因。 stack段的内存分配是编译器实现的,我们无需关心。同时 stack 通常的大小是有限的。 因此对于大内存的分配,或者想手动创建或释放内存,就只能够对heap段进行操作,这就是俗称的动态分配内存。例如 c 语言中的malloc、calloc、free以及 C++ 中的new、delete 内存的分配属于操作系统级别的操作、因此不管是 cc++ 语言的分配,最后都需要调用操作系统的接口。以 linux 为例,malloc 代码可能调用了操作系统接口mmap分配内存 linux 操作系统提供的内存分配接口如下: mmap/munmap 映射/释放 指定大小的内存. brk/sbrk – 改变data段`结束的位置来扩展 heap 段的内存 madvise – 给操作系统建议如何管理内存 set_thread_area/get_thread_area – 操作线程本地存储空间 动态内存分配是操作系统为我们做的事情,其效率直接影响到运行在操作系统上的程序。对于一般的程序来说,例如 c 语言中实现的malloc,最后都是通过调用操作系统的接口来实现的。 动态内存的调度是一个艰难复杂的话题,其要实现的目标包括: 快速分配和释放 内存开销小 使用所有内存 避免碎片化 内存分配的算法包括了: K&R malloc Region-based allocator Buddy allocator dlmalloc slab allocator 同时,由于算法解决的目标等不同,还会有不同的变种,其他的目标包括: 内存开销小(例如 buddy 的元数据很大) 良好的内存位置 cpu 核心增加时,扩展性好 并发 malloc / free GO 语言在进行动态内存分配时,实质调用了上面的操作系统接口。由于 Go 语言并没有调用 c 语言的malloc等函数来分配,组织内存,因此,其必须实现自己的内存组织和调度方式。 GO 语言借鉴了 TCMalloc(Thread-Caching Malloc) 的内存分配方式 TCMalloc(Thread-Caching Malloc) TCMalloc 是一种内存分配算法,比 GNU C 库中的 malloc 要快 2 倍,正如其名字一样,其是对于每一个线程构建了缓存内存。 TCMalloc 解决了多线程时内存分配的锁竞争问题 TCMalloc 对于小对象的分配非常高效 TCMalloc 的核心思想是将内存划分为多个级别,以减少锁的粒度。在 TCMalloc 内部,内存管理分为两部分:小对象内存(thread memory)和大对象内存(page heap)。 小对象内存管理将内存页分成多个固定大小的可分配的 free 列表。因此,每个线程都会有一个无锁的小对象缓存,这使得在并行程序下分配小对象(<= 32k)非常有效。下图的对象代表的是字节。



滴滴内部监控系统 Nightingale 开源啦

Posted by 夏泽民

夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台机器,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required