Strike Freedom

Live fast. Die young. Be wild. Have fun.

Discovery

Go netpoller 原生网络模型之源码全面揭秘

本文将基于 Linux 平台来解析 Go netpoll 之 I/O 多路复用的底层是如何基于 epoll 封装实现的,从源码层层推进,全面而深度地解析 Go netpoll 的设计理念和实现原理,以及 Go 是如何利用 netpoll 来构建它的原生网络模型的。主要涉及到的一些概念:I/O 模式、用户/内核空间、epoll、Linux 源码、goroutine scheduler 等等,我会尽量简单地讲解,如果有对相关概念不熟悉的同学,还是希望能提前熟悉一下。

Linux I/O 原理和 Zero-copy 技术全面揭秘

如今的网络应用早已从 CPU 密集型转向了 I/O 密集型,网络服务器大多是基于 C-S 模型,也即 客户端 - 服务端 模型,客户端需要和服务端进行大量的网络通信,这也决定了现代网络应用的性能瓶颈:I/O。 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。设置缓冲区最大的好处是可以减少磁盘 I/O 的操作,如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作;然而传统的 Linux I/O 在数据传输过程中的数据拷贝操作深度依赖 CPU,也就是说 I/O 过程需要 CPU 去执行数据拷贝的操作,因此导致了极大的系统开销,限制了操作系统有效进行数据传输操作的能力。 I/O 是决定网络服务器性能瓶颈的关键,而传统的 Linux I/O 机制又会导致大量的数据拷贝操作,损耗性能,所以我们亟需一种新的技术来解决数据大量拷贝的问题,这个答案就是零拷贝(Zero-copy)。

【译】如何设计一个云原生应用的架构?

云原生 (Cloud Natvie) 是一种将应用程序以微服务的形式构建并使之运行在容器化和动态编排平台之上的方式,这些平台充分利用了云计算模型的优势。云原生关注的是应用如何构建和部署,而非运行在哪里。这些技术能够赋能组织/企业在公有云、私有云和混合云等现代和动态的开发环境里构建和运行可扩展的应用程序。这些应用程序是从头开始构建的,以松散耦合原则进行系统设计,并且专门针对云级别的规模和性能进行了优化,基于托管服务并利用持续交付来实现可靠性和更快的上市速度。总体目标是提高速度、可扩展性,以及最终提高利润率。

【译】CPU 高速缓存原理和应用

曾三次获得 F1 世界冠军的杰基•斯图尔特 (Jackie Stewart) 表示,了解汽车的工作原理让他成为了一名更好的驾驶员。 "你并不需要先成为一个工程师才能去做一个赛车手,但是你得有一种机械同感 (Mechanical Sympathy)" Martin Thompson (高性能消息库 LMAX Disruptor 的设计者) 就一直都把机械同感的理念应用到编程中。简而言之,了解计算机底层硬件能让我们作为一个更优秀的开发者去设计算法、数据结构等等。 在这篇文章中,我们会深入钻研计算机处理器然后看看了解它的一些概念是如何帮助我们去优化程序的。

字节跳动在 Go 网络库上的实践

本文选自“字节跳动基础架构实践”系列文章。 “字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础架构发展和演进过程中的实践经验与教训,与各位技术同学一起交流成长。 RPC 框架作为研发体系中重要的一环,承载了几乎所有的服务流量。本文将简单介绍字节跳动自研网络库 netpoll 的设计及实践;以及我们实际遇到的问题和解决思路,希望能为大家提供一些参考。

【译】Go 语言项目源码贡献官方指导文档

以前给 Go 语言项目源码提交过一些 commits,期间阅读他们的官方指导文档的时候觉得这篇指导文档可以作为绝佳的关于大型软件项目的规范管理的参考,因为最近又提交了几个 commits,就又把这篇文档再看了一遍,有感于 Go 团队在项目管理和工程实践上的一些宝贵经验,就把文档翻译成了中文;一来为了更加深入地理解 Go 语言团队的项目工程最佳实践,二来则是为了给其他有意给 Go 语言源码提交贡献的开发者提供一点参考。

gnet: 一个轻量级且高性能的 Go 网络框架

gnet 是一个基于 Event-Loop 事件驱动的高性能和轻量级网络库。这个库直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:libuv 和 libevent。 这个项目存在的价值是提供一个在网络包处理方面能和 Redis、Haproxy 这两个项目具有相近性能的 Go 语言网络服务器框架。 gnet 的亮点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的网络库。

两种方式迁移 Docker 的默认安装(存储)目录

前阵子我给自己的云服务器买了数据云盘挂载上去了,作为以后主要的存储那些占用磁盘比较大的数据,所以就想着把一些以前装在系统的根目录 / 下的一些软件的数据目录迁移到新的数据盘挂载的目录下,首先迁移的是 Docker,我的服务器系统发行版本是 Ubuntu-16.04。

我的书单

这个书单是我从自己以前读过的或者目前正在读的所有书里精挑细选出来的,里面的书籍都是我个人相对喜欢以及认为有比较有价值的;这份书单会不定期更新,如果有看到符合口味的,欢迎交流!

后会有期

这是我在 2018 年 10 月份从腾讯离职时所写的一篇感悟文章,最早发表在个人公众号里,重新整理了一下发表在我的个人博客这里。

有哪些可称为「神作」的网络小说?

写了一个简单的爬虫,抓取了知乎问题:『有哪些可称为「神作」的网络小说?』下所有回答里提名的小说,并做了简单的统计,按去重的提名次数由高到低进行排序得到的完整列表,仅统计回答里带《》括起来的小说名,仅供参考。

Live fast. Die young. Be wild. Have fun.

© 2020 Strike Freedom

Powered by Bolo
Theme bolo-sakura by Mashiro
浏览 1002645 文章 37 评论 164

SCHEME TOOL