Plusaber's Blog

  • Home

  • Tags

  • Categories

  • Archives

System Design_大型网站伸缩性架构

Posted on 2016-02-01 | In System design | Comments:

网站架构的伸缩性设计

网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过增减部署的服务器数量就可以扩大或缩小网站的服务处理能力。这样就可以做到通过不断简单地向集群中添加服务器来增强整个集群的能力。

一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离是实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。

不同功能进行物理分离实现伸缩

使用新增的服务器处理某种特定服务,通过物理上分离不同的功能,实现网站伸缩。
System_design_c6_1

具体又可分为如下两种情况:

纵向分离(垂直分割):将业务处理流程上的不同部分分离部署,实现系统伸缩性。
System_design_c6_2

横向分离(功能分割):将不同的业务模块分离部署,实现系统伸缩性。
System_design_c6_3

单一功能通过集群实现伸缩

将不同功能分离部署可以实现一定程度的伸缩性,但是随着网站并发访问逐步增加,单一的功能独立部署在独立的服务器上也不能满足业务规模的要求。因此必须使用服务器集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。

集群伸缩又具体可分为应用服务器集群伸缩性和数据服务器伸缩性,技术实现差别很大。而数据服务器集群也可分为缓存数据服务器集群和存储数据服务器集群,其伸缩性设计也很不一样。

应用服务器集群的伸缩性设计

在构建高可用的架构时曾提到,应用服务器应该设计成无状态的,即应用服务器不存储请求上下文信息,这样每次用户请求可以由任意一台服务器处理,而不会影响结果。

如果HTTP请求分发装置可以感知或配置集群的服务器数量,及时发现集群中新上线或下线的服务器,并分发请求,就实现了应用服务器集群的伸缩性。

这里,这个HTTP请求分发装置被称为负载均衡服务器。

负载均衡是网站必不可少的基础技术手段,不但可以实现网站的伸缩性,同时还可改善网站的可用性,

System_design_c6_4

HTTP重定向负载均衡

使用HTTP重定向协议实现负载均衡。

System_design_c6_5

HTTP重定向服务器是一台普通的应用服务器,功能是更具用户的HTTP请求计算一台真实的Web服务器地址,并使浏览器重定向到该服务器。

Read more »

WordNet

Posted on 2016-01-20 | In research | Comments:

WordNet的Synset

WordNet是一个英语词汇库。名词、动词、形容词、副词以及词组以同义group的形式放在一起,称为synsets,也就是一个概念(concept)。下面是一个称为synsets的例子:

1
2
3
4
mileage
fuel consumption rate
gasoline mileage
gas mileage

这就是一个synset,表示汽车的汽油里程数概念,同一个synset里的词可以看做是表达同一种意思,也就是同义词(synonym)。Synset也通过概念语义link连接在一起,使得整个Wordnet组成一个具有语义的网络。

另外,WordNet中每一个synset包含一个简短的解释gloss,多个例子短句。

需要注意的是,WordNet不是通过词的形式(string, letter)聚集在一起,而是根据词的语义意思。同样的,当一个词form具有多种不同含义时,该词form会出现在多个synset中。

WordNet中Synset之间关系

synset之间最常见的关系是super-subordinate relation(上下级关系,也成为hyperonymy,hyponymy,ISA relation),比如较抽象的synset之间的关系{furniture}, piece_of_furniture},比较具体的synset之间的关系{bed},{bunkbed},所有名词都有一个最上级{entity}。hyperonymy关系是具有传递性的。WordNet区分了不同目录的具体实例(实例为叶子节点),比如一般名词,人物,地点等。例如armchair是一种chair,Barack Obama是一个人名。

Read more »

System Design_大型网站可扩展架构

Posted on 2016-01-17 | In System design | Comments:

构建可扩展的网站架构

扩展性

指对对现有系统影响下,系统功能可持续扩展或提升的能力。表现在系统基础设置稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。也就是系统架构设计层面的开闭原则(对扩展开放,对修改关闭),架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。

伸缩性

指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。如果这种增减是成比例的,就被称作线性伸缩性。在网站架构中,通常指利用集群的方式增加服务器数量、提高系统的整体事务吞吐能力。

低耦合系统更容易扩展和复用。软件架构师的关键能力在于能够将一个大系统分成N个低耦合的子模块,这些子模块包含横向的业务模块,也包含纵向的基础基础模块。

设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性。前面提到使用分层和分割的方式进行架构伸缩,分层和分割也是模块化设计的重要手段,利用分层和分割的方式将软件分割为若干个低耦合的独立的组件模块,这些组件模块以消息传递及依赖调用的方式聚合成一个完整的系统。

在大型网站中,这些模块通过分布式部署的方式,独立的模块部署在独立的服务器(集群)上,从物理上分离模块之间的耦合关系,进一步降低耦合性,提高复用性。

模块分布式部署后具体聚合方式主要有分布式消息队列和分布式服务。

利用分布式消息队列降低系统耦合性

如果模块之间不存在直接调用,那么新增模块或者修改模块就对其他模块影响最小,这样可以实现很高的可扩展性。

事件驱动架构(Event Driven Architecture)

指通过在低耦合的模块之间传输时间消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作,典型的EDA架构就是操作系统中常见的生产者消费者模式。在大型网站架构中,具体实现手段有很多,最常用的是分布式消息队列。

System_design_c7_01

消息队列利用发布-订阅模式工作,消息发送者发布消息,一个或多个消息接收者订阅消息。发送者和接收者没有直接耦合,可以新增业务为发布者或者接收者而无需影响原有系统业务,从而实现网站业务的可扩展设计。

另外由于消息发送者不需要等待消息接收者处理数据就可以返回,系统具有更好的响应延迟,同时,在网站访问高峰,消息可以暂时存储在消息队列中等待消息接收者根据自身负载处理能力控制消息处理速度,减轻数据库等后端存储的负载压力。

分布式消息队列

队列是一种先进先出的数据结构,分布式消息队列可以看做这种数据结构的分布式部署到独立服务器上,应用程序可以通过远程访问接口使用分布式消息队列,进行消息存取操作,进而实现分布式的异步调用。

System_design_c7_02

消息生产者通过远程接口将消息推送给消息队列服务器随后返回,消息队列服务器根据消息订阅列表查找订阅该消息的消费者程序,将消息队列中的消息按照先进先出FIFO将消息通过远程通信端口发送给消费者程序。

目前开源的分布式消息队列产品有Apache ActiveMQ等,这些产品另外也对可用性、伸缩性、数据一致性、性能也做了很多改善。

在伸缩性方面,由于消息队列服务器上的数据可以看做是无状态的,伸缩性设计比较简单。将服务器加入分布式消息队列集群中,通知生产者服务器更改消息队列服务器列表即可。

在可用性方面,为了避免消费者进行处理缓慢,分布式消息队列服务器内存空间不足造成的问题,如果内存队列已满,会将消息写入磁盘。内存队列消息处理完后,将磁盘内容加载到内存队列继续处理。

分布式消息队列可以很复杂,比如说支持ESB,SOA;也可以很简单,如用MySQL也可以当做分布式消息队列。

Read more »

Elasticsearch配置

Posted on 2016-01-05 | In Developing | Comments:

Elasticsearch配置

Elasticsearch是一个实时分布式搜索和分析引擎,基于REST,我们可以使用Elasticsearch快速的实现全文搜索、结构化搜索、分析。和Apache Solr一样,Elastic Search同样使用Apache Lucene作为核心实现索引和检索功能。

这里首先介绍Elasticsearch的安装。由于Elasticsearch仍处于快速发展阶段,所以每个版本的安装方式可能会有不同。这里使用的Elasticsearch版本是2.1.1,Elasticsearch无需安装,只需要直接下载解压,然后运行bin/elasticsearch即可启动Elasticsearch,并默认在9200端口提供RESTful服务。

  1. 下载Elastisearch
  2. 解压,tar -zxvf 文件。
  3. 运行bin/elasticsearch。

curl 'http://localhost:9200/?pretty',我们会得到:

1
2
3
4
5
6
7
8
9
10
11
12
{
"name" : "Namorita",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.1.1",
"build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
"build_timestamp" : "2015-12-15T13:05:55Z",
"build_snapshot" : false,
"lucene_version" : "5.3.1"
},
"tagline" : "You Know, for Search"
}

另外一个常用的工具是Marvel,Elasticsearch的管理和监控工具,目前的最新的版本是2.1,目前版本似乎是要结合数据可视化工具Kibana运行。下面是完整的步骤:

Step 1: 在Elasticsearch安装Marvel:

1
2
bin/plugin install license
bin/plugin install marvel-agent

Step 2: 下载Kibana并解压。
Step 3: 在Kibana中安装Marvel,bin/kibana plugin --install elasticsearch/marvel/latest
Step 4: 启动Elasticsearch 和 Kibana

1
2
bin/elasticsearch
bin/kibana

Step 5: 访问http://localhost:5601/app/marvel查看运行的Elasticsearch服务。

True Nobility

Posted on 2016-01-01 | In Life | Comments:

In a calm sea every man is a pilot.

But all sunshine without shade, all pleasure without pain, is not life at all. Take the lot of the happiest—it is a tangled yarn. Bereavements and blessings, one following another, make us sad and blessed by turns. Even death itself makes life more loving. Men come closest to their true selves in the sober moments of life, under the shadows of sorrow and loss.

In the affairs of life or of business, it is not intellect that tells so much as character, not brains so much as heart, not genius so much as self-control, patience, and discipline, regulated by judgment.

I have always believed that the man who has begun to live more seriously within begins to live more simply without. In an age of extravagance and waste, I wish I could show to the world how few the real wants of humanity are.

To regret one’s errors to the point of not repeating them is true repentance. There is nothing noble in being superior to some other man. The true nobility is in being superior to your previous self.

— by Ernest Hemingway

123…17
Plusaber

Plusaber

Plusaber's Blog
82 posts
12 categories
22 tags
Links
  • LinkedIn
  • Indeed
  • Baito
  • Kaggle
© 2014 – 2019 Plusaber
Powered by Hexo v3.8.0
|
Theme – NexT.Mist v7.1.1