本文翻译自文章Service Discovery via Consul with Amazon ECS
现如今随着微服务架构的出现,很多应用都是以一套分布式组件的形式来部署。在这样的架构中,你需要在多个EC2实例上的多个Docker容器中,配置和协调各种各样的应用程序。
亚马逊EC2容器服务(ECS)提供了一个用于管理资源、任务以及容器调度的集群管理框架。但是,很多应用仍然需要额外的组件来管理分布式组件之间的联系。服务发现的概念就是用来定义这种帮助管理这些联系的组件。
继续阅读 »
eventlet中的backdoor
OpenStack中编程模型中大量使用了GreenThread,使用eventlet库实现,关于eventlet可以参考官方文档。这里单独说一说backdoor的使用。
OpenStack每一个服务在创建时,都会根据backdoor_port配置项决定是否创建backdoor server,允许telnet到服务所在的节点进行调试,主要用于获取某个长时间运行的进程的状态。其原理是这样的:在程序的代码中,专门运行一个协程,这个协程一般不会被调度到,所以不会影响程序的正常运行。这个协程中跑了一个backdoor_server,比如下面的这行代码:
eventlet.spawn(backdoor
继续阅读 »
算法:由输入经过一系列的计算步骤得到输出
排序问题:将无序的输入经过处理按照一定的孙徐输出
优秀的算法:
- 正确性(思路清晰)
- 高效(算法分析)
- 易于实现(现成的算法)
算法的用处:
- 生物信息学
- 网络(图论,字符串查找)
- 信息安全(RSA..)
- 优化(调度)
算法问题:
- 图论(最短路径...)
- LCS(动态规划...)
- 拓扑排序
- 凸包
数据结构:
C++ STL 优缺点 效率
难解问题:
并行算法
CPU效率
算法技术
算法的效率
渐近记号
问题规模量 时间T(n)
数组去重
继续阅读 »
总结:
各个厂商对Nova社区的参与依然如火如荼,积极将自身虚拟化产品作为driver与Nova对接。其中VMware、Hypver-V两家的积极性最高,不断弥补自身产品与社区KVM特性的差距,向A类driver看齐;
Nova社区开始关注NFV特性,引领开源云计算向电信领域拓展;
随着OpenStack大规模部署,调度瓶颈开始凸显,社区已经启动新的项目Gantt,逐步将nova-scheduler剥离;
社区已经找到版本间兼容的新的方式:microversion,特性扩展更加严格;
随着Nova代码规模的上涨,社区开始有意识的进行内部重构,优化代码逻辑
详细分析:
继续阅读 »
在了解堆排序之前,我们有必要清楚“什么是堆呢?”。
堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
堆的逻辑定义:
堆的实现通过构造二叉堆(英语:binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。
任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
堆总是一棵完全树。即
继续阅读 »
原子操作,线程间交互数据最细粒度的同步操作,它可以保证线程间读写某个数值的原子性。
由于不需要加重量级的互斥锁进行同步,因此非常轻量,而且也不需要在内核间来回切换调度,效率是非常高的。。
那如何使用原子操作了,各个平台下都有相关api提供了支持,并且向gcc、clang这些编译器,也提供了编译器级的__builtin接口进行支持
windows的Interlockedxxx和Interlockedxxx64系列api
macosx的OSAtomicXXX系列api
gcc的__sync_val_compare_and_swap和__sync_val_compare_and_swap_8等__builtin接口
x86和x86_
继续阅读 »
隔离CPU核心
从一般内核 SMP 平衡和调度算法中删除指定的 cpu (由cpu_number定义)。 将进程移动到或移出“独立” CPU 的唯一方法是通过 CPU 亲和系统调用。 cpu 数量从0开始,因此最大值比系统上的 cpu 数量少1
此选项是隔离 cpu 的首选方法。 另一种方法是手动设置系统中所有任务的 CPU 掩码,这可能会导致问题和次优的负载均衡器性能
继续阅读 »