DevOps基础(2)--Ansible自动化运维工具
Shell脚本能够为我们提供一部分的系统运维功能, 例如定时任务, 由Jenkins所管理的边缘触发任务等等, 但是如果想要对多台服务器进行管理和运维, 就需要Ansible来协助完成。 »
Shell脚本能够为我们提供一部分的系统运维功能, 例如定时任务, 由Jenkins所管理的边缘触发任务等等, 但是如果想要对多台服务器进行管理和运维, 就需要Ansible来协助完成。 »
在写了许多代码, 搭建了一些分布式服务之后, 越发觉得一个大型的高并发系统就是一个操作系统。 在分布式系统中, 我们会讲数据一致性, 如何做到缓存和DB的一致性, 这也是操作系统需要解决的问题: 内核高速页缓存如何与磁盘文件数据一致。 又比如对于一些耗时且非必需的任务, 在分布式系统中很有可能采用消息队列来进行异步处理, 例如邮件的发送, 而在操作系统中, I/O也是一个非常耗时的任务, 同样采用了异步处理的方式来最大化的利用系统资源, 只不过并不是采用消息队列而已。 »
在单机缓存中, 并发的安全性问题与语言的并发安全问题完全可以归为一类, 缓存的穿透问题可以采用巧妙的数据结构进行处理, 很多问题本质上仍然是一些基础问题。 »
Flask作为Python语言中最为轻量的Web框架, 由于其核心内容的简洁以及良好的可拓展性, 一直受到广泛的开发者所喜爱。 对比于Django, Flask并没有”我给你的就是最好的, 别管那么多, 拿着用就好”的思想, 而是让开发者自己做出选择, 自己设计开发一个组件, 或者挑选一个你喜欢的第三方库。 »
在《算法》(第四版)的第一章最后一小节中, 也就是”案例研究: union-find算法”这一小节, 我看到了并查集。 在我完整的阅读了所有的算法内容之后, 脑子里只剩下两个字: 优美。 »
在我刚接触Python这门开发语言时, 并没有想用它做Web后端开发, 而是拿来写爬虫。 第一个接触的爬虫框架就是Scrapy。 网络爬虫绕不开的一个话题就是URL去重问题。 在Scrapy原生框架下, 使用的是集合来对URL进行去重的。 集合本身采用哈希表实现, 是一种典型的以空间换时间的数据结构, 当URL数量极为庞大时, 使用这种策略的去重很有可能导致内存溢出而造成服务器宕机的问题。 此时, Bitmap走进了我的视线。 »
Redis内置了5种对外开放的数据结构, 分别是字符串, 列表, 集合, 有序集合以及哈希对象。 每一种数据结构的底层实现都会由存入的数据产生动态变化, 这也是Redis具有极佳吞吐量的原因之一。 本篇文章主要描述其基本数据结构的实现以及这些结构在使用时的注意事项。 »
优先队列为动态变化的数据赋予了高效且准确的排序能力, 尽管有非常大规模的数据, 二叉堆所实现的优先队列依然能够表现出色。 »
Nginx不管是在单机部署还是在集群部署下, 都起着非常重要的作用。 底层由C语言编写, 并且采用事件驱动模型对Socket连接进行管理, 所以有着非常高效的请求处理能力, 并且支持海量的并发。 本篇文章不会对Nginx的底层原理进行深究, 而是整理自己在工作中所遇到的一些问题和积累的经验。 »
消息队列常常被用于跨进程通信, 异步调用, 系统解耦以及流量削峰等场景下。 目前市场上的消息队列种类繁多, 有LinkedIn开源的kafka, 阿里开源的RocketMQ, 以及使用较为广泛的RabbiMQ。 Redis虽然也可以做消息队列, 但是更多的是用来做缓存和其它工具使用。 但是随着Redis 5.0 版本的发布, Redis的功能越来越丰富, 也不排除在未来的某一天也能够占据消息队列的重要一席。 »