转自http://www.iteye.com/news/29872
当我们对可伸缩性感兴趣时,便会寻找链接、说明、书籍、引用等各种可以学习利用的资料。本文篇幅较短,但希望能够帮助你高效地开启高可伸缩性编程之旅。
声明:
你无需使用N台机器来构建/测试一个集群/高可伸缩的系统,只需使用 Vagrant就可以轻易部署N+台机器。
引用
现在,你可以用这些虚拟服务器技术来武装自己,我希望大家不但要通晓这些理论知识,而且要付诸实践。
- 首先,通过查看该教程来激发自己: using nodejs + nginx + applying static caching + load balancing + testing ,所有这些大概需要7分钟时间。
- 将这些单词及词意添加到你的词汇量当中: scalability, failover, single point of failure (SPOF), sharding, replication, load balancing;即使你不能完全理解它们。
- 为了对可伸缩系统有个总体的概念和更好地了解来龙去脉,我强烈建议你阅读 Scalable Web Architecture and Distributed Systems。
- 对概念有了清晰的理解过后,你可以进入下一个层次,如何使用一个 负载均衡器,有什么 决策以及会遇到哪些 问题,然后你可以尝试运行一个 haproxy,并且避免让它产生 单点故障。
- 动手实践,亲自去 实现300万个请求/秒的服务,为了完成这一任务,你需要 生成300万个请求,微调你的Web服务,最终 规模化并且进行测试。
- 你的应用程序已经实现了可伸缩,现在轮到数据库了,它是应用程序里非常重要的一部分。这里,我强烈建议你阅读如何使用MongoDB进行 分片(sharding)和 复制(replication)来进行扩展、Cassandra的 线性扩展和 在集群中添加节点来提高易用性。
- 由于你的应用程序和数据库都进行了很好的可伸缩和容错,那么你的 服务器就可以节省大量不必要的工作量,并且会有 更快的用户响应。但要记住,一个好的请求是永远无法实现“真正的服务的”。
- 假设我们在一个数据中心里部署整个基础架构,现在,我们有另一个SPOF。因为所有的服务器都在同一个空间,所以要避免一些自然灾害的发生,比如最简单的停电。 Cassandra可以非常方便地支持多个数据中心,你可以看看 谷歌是如何解决这类问题的。如果你的用户是在巴西,那么,访问时间最好不要长于他需要时间,请记住,即使在最好的情况下,我们仍然会有 延迟。
测试
下面这些问题可以很好地测试你对可伸缩编程的掌握程度,请认真回答。
- 为什么要可伸缩?人们通常都是如何实现的?
- 如何在N个服务器间的RAM上处理用户会话?
- LB如何知道哪台服务器是正常运行的?LB是如何知道哪台服务器发送请求的?
- LB不是另一个SPOF?我们如何为LB提供故障转移?
- 操作系统是否被64K端口限制?Linux是否能方便快捷地实现?
- Mongo是如何解决故障转移和高可伸缩?Cassandra怎么样?当集群里新进一个节点时,Cassandra是如何进行分片的?
- 什么是缓存锁?我应该使用什么缓存策略?
- 怎样才能使单个域里拥有多个IP地址?BGP是什么?我们是如何使用DNS或BGP来区域性的服务用户的?
相关推荐
高性能服务器网络可伸缩性.doc
Node.js是一种主流框架,它允许你使用JavaScript快速构建具有高度可伸缩性的网络程序。可是,它有自己的学习曲线,这本较为深入的指南性图书首先介绍了Node.js平台的安装,然后重点关注:创建和加载模块;使用缓冲区...
6. **无状态服务**:确保服务端不保存用户的状态数据,这有助于提高系统的可伸缩性和可用性。 7. **容量规划**:定期评估系统的容量需求,并根据实际情况调整硬件配置或进行软件优化。 8. **功能开关**:在系统中...
C# 3.0是.NET Framework 3.5的一部分,引入了许多新的特性和改进,使得C#在编程效率和灵活性上有了显著提升。这本书详细阐述了这些新特性,旨在帮助开发者掌握更高级的编程技巧和最佳实践。 首先,C# 3.0的重要更新...
并发编程是Java高级编程技能中的重要组成部分,尤其是在需要处理大量数据、提供快速响应、实现高吞吐量和高可伸缩性软件时显得尤为重要。 在Java并发编程中,多线程编程是指同时运行多个线程(Thread),每个线程...
### 可伸缩向量图形(SVG)编程介绍 #### 一、引言 随着互联网技术的不断发展,网络上图像的展示方式也在不断进化。早期的网页主要依赖于光栅图像(如GIF和JPEG),这类图像虽然能够很好地展现摄影级别的细节,但在...
Node.js是一种主流框架,它允许你使用JavaScript快速构建具有高度可伸缩性的网络程序。可是,它有自己的学习曲线,这本较为深入的指南性图书首先介绍了Node.js平台的安装,然后重点关注:创建和加载模块;使用缓冲区...
第三部分聚焦于性能优化,讲解了如何避免活跃性问题(如死锁和活锁)以及如何提高并发代码的性能和可伸缩性。此外,还介绍了测试并发代码正确性和性能的实用技巧,这对于在生产环境中确保程序的稳定性和效率至关重要...
本文将基于文档《Java并发编程与高并发解决方案-学习笔记***.pdf》中提供的内容,来详细阐述并发编程和高并发的基本概念、CPU多级缓存与缓存一致性、以及Java内存模型。 ### 并发与高并发概念 在现代多线程编程中...
8. **服务质量**:WCF允许设置服务质量,如QoS(Quality of Service),以控制服务的可发现性、可管理性和可伸缩性。 通过对源码的深入研究,开发者不仅可以学习到如何创建和使用WCF服务,还能了解到如何根据实际...
通过消息队列,应用程序可以解耦,提高可伸缩性和可靠性。 5. **JPA(Java Persistence API)** 和 **Hibernate**:JPA是Java官方提供的持久化框架,而Hibernate是其流行的实现之一。它们用于管理对象关系映射(ORM...
这包括选择合适的数据结构和算法、设计高可用性和伸缩性的分布式系统、进行压力测试并分析性能瓶颈,以及合理利用内存和CPU资源。 通过这个"Java高级编程项目实践",开发者将不仅能够巩固理论知识,还能在实际操作...
通过学习《ASP.NET Web站点高级编程》,开发者能够掌握如何利用这些高级特性设计和实现功能丰富的Web应用,同时理解如何优化性能、处理并发访问、实现安全性和伸缩性。这本书的内容可能涵盖上述所有方面,为读者提供...
标题“Java_用于联邦学习模型的可伸缩高性能服务系统”表明我们关注的是一个基于Java开发的联邦学习平台,它设计为具有高可伸缩性和性能优化,能够高效地处理大量并发的联邦学习任务。 描述中的“Java_用于联邦学习...
它的高性能、易用性和可伸缩性使其在处理大规模深度学习任务时具有竞争力。通过NervanaSystems-neon-f9d771b这个资源,用户不仅可以了解neon的内部结构,还能深入学习如何利用它进行实际的深度学习项目。对于那些...
【标题】"基于PHP的Wikka高速可伸缩性软件.zip"揭示...通过对这个压缩包的详细分析,不仅可以学习到Wikka Wiki的运行机制,还能深入理解PHP编程和Web应用程序的架构设计,尤其是处理高流量和大规模数据的可伸缩性策略。
这个主题不仅包括了基础的Java EE(企业版)概念,还涉及到了高性能、高可用性、可伸缩性和安全性等方面。以下是一些核心的知识点: 1. **Java EE平台**:Java服务器高级编程首先会涉及Java EE平台,它是Java应用...
这本书深入浅出地介绍了Erlang在分布式系统、并发处理以及高可用性设计中的应用,同时结合 OTP 提供了强大的工具和库支持。通过阅读此书,读者可以掌握如何利用Erlang和OTP构建高效、容错的实时系统。 Erlang是一种...