操作系统原理(01)-I/O

在写了许多代码, 搭建了一些分布式服务之后, 越发觉得一个大型的高并发系统就是一个操作系统。 在分布式系统中, 我们会讲数据一致性, 如何做到缓存和DB的一致性, 这也是操作系统需要解决的问题: 内核高速页缓存如何与磁盘文件数据一致。 又比如对于一些耗时且非必需的任务, 在分布式系统中很有可能采用消息队列来进行异步处理, 例如邮件的发送, 而在操作系统中, I/O也是一个非常耗时的任务, 同样采用了异步处理的方式来最大化的利用系统资源, 只不过并不是采用消息队列而已。 »

一文理解Flask Web开发

Flask作为Python语言中最为轻量的Web框架, 由于其核心内容的简洁以及良好的可拓展性, 一直受到广泛的开发者所喜爱。 对比于Django, Flask并没有”我给你的就是最好的, 别管那么多, 拿着用就好”的思想, 而是让开发者自己做出选择, 自己设计开发一个组件, 或者挑选一个你喜欢的第三方库。 »

那些有趣的数据结构与算法(02)--Bitmap

在我刚接触Python这门开发语言时, 并没有想用它做Web后端开发, 而是拿来写爬虫。 第一个接触的爬虫框架就是Scrapy。 网络爬虫绕不开的一个话题就是URL去重问题。 在Scrapy原生框架下, 使用的是集合来对URL进行去重的。 集合本身采用哈希表实现, 是一种典型的以空间换时间的数据结构, 当URL数量极为庞大时, 使用这种策略的去重很有可能导致内存溢出而造成服务器宕机的问题。 此时, Bitmap走进了我的视线。 »

Redis基本数据结构与实现

Redis内置了5种对外开放的数据结构, 分别是字符串, 列表, 集合, 有序集合以及哈希对象。 每一种数据结构的底层实现都会由存入的数据产生动态变化, 这也是Redis具有极佳吞吐量的原因之一。 本篇文章主要描述其基本数据结构的实现以及这些结构在使用时的注意事项。 »

分布式系统基础学习(04)--Nginx

Nginx不管是在单机部署还是在集群部署下, 都起着非常重要的作用。 底层由C语言编写, 并且采用事件驱动模型对Socket连接进行管理, 所以有着非常高效的请求处理能力, 并且支持海量的并发。 本篇文章不会对Nginx的底层原理进行深究, 而是整理自己在工作中所遇到的一些问题和积累的经验。 »

分布式系统基础学习(03)--消息队列(RabbitMQ)

消息队列常常被用于跨进程通信, 异步调用, 系统解耦以及流量削峰等场景下。 目前市场上的消息队列种类繁多, 有LinkedIn开源的kafka, 阿里开源的RocketMQ, 以及使用较为广泛的RabbiMQ。 Redis虽然也可以做消息队列, 但是更多的是用来做缓存和其它工具使用。 但是随着Redis 5.0 版本的发布, Redis的功能越来越丰富, 也不排除在未来的某一天也能够占据消息队列的重要一席。 »