Docker笔记二:Lumen + Redis

  Lumen
基于 Laravel 打造,专为构建微服务和 APIs
而生。Lumen与Redis服务端通信可透过Predis(PHP库)或者PhpRedis(PHP的C扩展)来促成,建议采取PhpRedis,其性质再强。Lumen下使用Predis和PhpRedis都需要引入illuminate/redis(PHP库),illuminate/redis(PHP库)都针对Predis和PhpRedis(Laravel
5.3上述)进行了老好的包装,但illuminate/redis(PHP库)又凭借predis/predis(PHP库),故安装 illuminate/redis时会自行引入predis/predis(PHP库)。

为此rails3召开手上底此网站项目,已经发出一半年差不多了。我们以此集团应该算是比较早采用rails3召开项目之,3.0正规版刚发布即起来尝试了,在项目开发中对广大题目吧举行了有追。谈不达标经历,更如非达到最佳实践,只是分享出去,经学见易,道家见淫,有亟待的冤家各取所需要。小商店小品种,适用于初中级用户,大牛们可一笑而过。 

  Redis 与
Memcached 均为常用之 key-value
分布式内存对象缓存系统,可提供数据缓存和多少共享能力,Redis
支持持久化,而 memcached
不支持持久化,发生更开后数未会见自动恢复。

1、网站要求 

  关于Memcached:

财经新闻网站,向用户提供经济金融资讯,发布以及宣扬企业研发的各种经济产品,引导用户注册及进货活。当前网站的情来是铺的消息平台与物价指数数据库,通过http接口和oracle
sql获取数据并呈现,可能在中短期会发出用户互动与用户原创内容(UGC)的需。 

  • memcached采用Slab
    Allocation机制基于hashmap来实现对内存对象的创立同治本,容量(哈希表中桶的多少)和加载因子(容量自动增加之前好齐多满之同一栽口径)影响其性。当哈希表中之条规数超过了加载因子和眼前容量的乘积时,则只要指向拖欠哈希表进行
    rehash
    (重建中数据结构),从而哈希表将拥有大体有数加倍之桶数。在Java编程语言中,加载因子默认值为0.75,默认哈希表元啊101。
    图片 1
  • memcached如果运行于默认状态下,应放在防火墙后端;
  • 在放置空间被占满之后,memcached采用惰性失效(Lazy
    Expiration)机制与Least Recently Used(LRU)机制来举行淘汰管理;
  • 基于libevent的事件处理,运行多线程处理多客户端并发连接要,虽说也支撑分布式,但服务端并不曾分布式功能,彼此不克互相通信,完全依赖让客户端实现,故障转移也无提供冗余节点,一旦有节点发生故障将致相应的数量不可用;
  • 客户端libmemcached可采用多种哈希算法(MD5、CRC等)计算key,对非标量类型数据如数组、对象(非资源类型才会于序列化)等拿先期进行序列化然后再度发送给服务端,支持Multi操作;
  • CAS(Check And Set)是Memcached中较有利的平种植预防竞争修改资源的主意

    A 64bit "CAS" value, which is kept unique.
    
  • 支撑文件协议和二进制协议两种重要的情商。此外,还支持子协议SASL
    Authentication、Range
    operations。相关信息参考 https://github.com/memcached/memcached/wiki

    下面这段是有关文本协议“noreply”的讲述,同时建议下二进制协议:

    Most ASCII commands allow a "noreply" version. One should not normally use this with the ASCII protocol, as it is impossible to align errors with requests. The intent is to avoid having to wait for a return packet after executing a mutation command (such as a set or add).
    
    The binary protocol properly implements noreply (quiet) statements. If you have a client which supports or uses the binary protocol, odds are good you may take advantage of this.
    

    下面这段是关于“A Well Designed Binary Protocol Client”的叙说:

    With the binary protocol, it(A Well Designed Binary Protocol Client may take many application threads and use a single TCP connection back to memcached) is possible to pack requests from different client instances into the same TCP socket, then dole back results to the right owners.
    

当可预料的前景,即2顶3年内,预计流量用高达10-100万PV/天。因此当进行设计时,以该流量当本架构能够承接的上限。如果网站确实有幸在到了几百万PV以上之流量,那肯定就不缺少钱了,凡是钱会迎刃而解之问题,都非是什么好题材。 

  有关Redis(REmote
DIctionary Server,
远程字典服务器)
:SSDB支撑LevelDB,是Redis的替代品,且与那配合。

2、架构设计 

  • 运作单线程(多核CPU无法充分利用)处理多客户端并发连接要,采用了异步非阻塞
    IO
    模型(epoll)。多线程自然是好比较单线程有再次强的性质上限,但每当今日之测算环境受到,即使是单机多线程的上限为不可知满足实际需要了,因此单机单线程集群化部署是卓有成效化解方案;
  • 不予赖libevent这个追求通用而招致代码庞大的库房,用libevent中之点滴个文件修改实现了好的epoll
    event loop,小巧并夺因,编译Redis之前并不需要执行./configure;
  • Redis 2.0长了虚拟内存(Virtual Memory,Redis自己实现的比OS
    Page更密切之换入出粒度)特性,实现了冷热数据分离,让数据容量突破了物理内存的限量;
  •  支持多种类型的数据结构,如strings, hashes, lists, sets, sorted sets
    with range queries, bitmaps, hyperloglogs and geospatial indexes
    with radius queries;
  • 支持Cache-Only、Persistence两栽存储模式,Persistence可分AOF(Append-Only
    File)、RDB(Redis
    Database)两种植体制(但官方建议少种模式还要开,参考Redis
    Persistence),可用以crash后打磁盘恢复,但是还存在或者有失数据(数据可靠性)问题。从读缓存是角度讲,通常咱们的以可以接受这种数量丢失带来的熏陶,如果用要求又强之数可靠性,那即便无应该针对此类数据利用缓存服务;

    RDB:在save、shutdown、slave时触发写二进制文件,粒度大,如果这些操作未完成之前crash可能导致丢失一部分数据。
         通过fork一个进程,copy-on-write把整个db保存下来,而主进程不会进行任何IO操作,保证了redis的高性能。
    
    AOF:持续把写操作命令格式化后追加到日志文件的尾部,粒度较小,crash之后数据丢失小。AOF支持不同的fsync策略,
         包括无fsync、每秒fsync、请求时fsync,默认为每秒fsync策略。fsync是由后台线程完成的,主线程继续努
         力地执行写请求。AOF是文本文件,通常也比RDB文件大,恢复速度慢。
    
  • Redis支持Cluster、Master-Slave
    replication,由于Redis的高性能,replication基本没有延迟,这样齐了防护单点故障及落实了赛可用;

  • Redis支持工作:watch/multi/exec(discard、unwatch);
  • list可用来落实队列;
  • Redis
    pipeline技术好在服务端未响应时,客户端可延续向服务端发送请求,并最后一次性读取所有服务端的应。

冲预测流量,在可预料的时日等,结合该类型的营业要求以及预算基金,网站要因为大可用(HA)和有限的水准扩展性(scale
out)为基本架构理念,采用分布式无共享架构(distributed share nothing
architecture),使用rails默认的cookie_store机制来有所与处理session,消除了有或变成性瓶颈的集中式session的先天不足。而且以架构设计时,使得系统负荷尽量平均分配到各级令服务器上。 

 

单台服务器如同XX的承诺,永远都是靠不歇的。单台服务器会死机、掉电、停转、拔线,所以于搭中尽最充分或避免每个功能组的单点故障,做到以服务器集众多被,任意一令服务器失效,或几大不相干服务器又失效,网站仍可正常运行。而且无论是单点故障的架,服务器可天天再次开,也方便操作系统的水源升级和安全补丁等一般性维护工作。经过就几独月的连续使用,各种缘由之几不好单点故障均无影响及网站正常劳动。 

一. Redis的Docker部署

以数据库的使用上,考虑到传统的涉嫌项目数据库已经不太适应当下互联网应用之雅量数据和赛负荷特点,因此mysql只由及要数据存储作用,利用事务性和成熟性,保证网站数据的一体化与安康。然后加入非关系型数据库redis和mongodb,作为数据冗余存储和计量中心,承载绝大部分底高负载数据请求,可有效减多少mysql的压力。这样虽无须费心配置复杂难用的但是扩大mysql集群,使用单台mysql服务器即可承载较高的网站流量。而redis和mongodb天生就是为互联网应用设计的,它们的集群配置以及水平扩展相对更加简易好。听说现在就有组织才下mongodb来作网站数据库,向她们的前卫和勇敢,致以我们团深入的崇敬。 

  1. 创建Dockerfile-Redis(参考https://github.com/dockerfile/redis/blob/master/Dockerfile ):

    FROM ubuntu
    MAINTAINER cenze <272666745@qq.com>
    
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    ADD conf/sources.list /etc/apt/
    RUN apt-get update \
    && apt-get install -y gcc make vim
    
    ENV PKGS="/usr/local/pkgs"
    ADD packages/redis-3.2.8.tar.gz $PKGS/
    
    # install redis
    ENV PREFIX_REDIS="/usr/local/redis"
    WORKDIR $PKGS/redis-3.2.8
    RUN make \
    && make PREFIX=$PREFIX_REDIS install \
    && cp redis.conf $PREFIX_REDIS/ \
    && cp src/redis-trib.rb $PREFIX_REDIS/bin/ 
    
    VOLUME ["/data"]
    ENV PATH $PREFIX_REDIS/bin:$PATH
    
    EXPOSE 6379
    
    CMD ["redis-server","/usr/local/redis/redis.conf"]
    

    注意事项:

    • Redis命令参考:https://redis.io/commands
    • 本身就先行下充斥了PhpRedis的源码安装包redis-3.2.8.tar.gz位于宿主机
      ./packages目录下
    • redis.conf中取消行 bind 127.0.0.1
      或强烈绑定 IP地址集,其他容器才不过看 
    • redis.conf中一旦不安装密码,可能用安装
      protected-mode 为 no以关闭保护模式,protected-mode 默认值为
      yes
    • 安装目录的bin下产生个redis-cli可拷到另外容器被作命令行接口来连续管理redis服务端
    • 卷/data用于缓存数据对象的持久化存储目录
  2. 构建镜像:

    sudo docker build -t cenze/redis -f Dockerfile-Redis .
    
  3. 运作容器:

    sudo docker run -d --name redis cenze/redis
    

    redis-cli或netcat(nc)或telnet测试部署:

    root@60c9de8c01a0:/usr/local/pkgs/redis-3.2.8# redis-cli
    127.0.0.1:6379> set cache redis
    OK
    127.0.0.1:6379> get cache
    "redis"
    127.0.0.1:6379>  
    

     

图片 2

 二.创建Lumen项目

2.1 软硬件平台 
手上着运作的硬件是6贵dell
2U二手服务器,总价约在1.6万,物美价廉,居家必备。目前利用优秀。另外借企业发展东风,已发出8玉新dell刀片进入机房,正准备把整个系统迁移到新服务器上。 

  1. composer创建Lumen:composer``无法以 root/super 用户来运行,所以需要切换到其他用户环境,比如本人会运行如下命令

    su - www-data 
    export PATH=/usr/local/php/bin:$PATH (这一条最好写进Home下的.profile, composer依赖PHP来运行) 
    composer create-project --prefer-dist laravel/lumen lumen
    
  2. .env参数配置:

    APP_ENV=local
    APP_DEBUG=true
    APP_KEY=bcee22b233721b47c6043e6bf35ac4ee
    APP_TIMEZONE=Asia/Shanghai
    
    DB_CONNECTION=mysql
    DB_HOST=[myDbHost]
    DB_PORT=3306
    DB_DATABASE=[myDataBase]
    DB_USERNAME=[myUser]
    DB_PASSWORD=[myPassword]
    
    CACHE_DRIVER=redis
    QUEUE_DRIVER=sync 
    
    REDIS_HOST= 172.17.0.3
    REDIS_PORT= 6379
    

     

服务器操作系统使用ubuntu server 10.04.2
x64,正在测试11.04,如可用并方便,则闹或当新硬件上安使用。11.04官方支持及2012年12月份,对人类来说已经足够。2012后头,所有服务器就荡然无存。 

三.Lumen中启用Predis**

2.2
高可用方案。
核心器件采用keepalived,使用master-backup机制来实施主备服务器的实时切换。 

  1. 安装Predis:Lumen中使用Predis需要引入
    predis/predis 和 illuminate/redis两个确保

    cd /path/to/lumen
    composer require illuminate/redis (predis/predis为illuminate/redis所依赖,故将被自动安装上)
    
  2. **redis客户端**配置****修改lumen/vendor/laravel/lumen-framework/config/database.php

    'redis' => [
    
            'client' => 'predis',
            //'client' => 'phpredis',
    
            'cluster' => env('REDIS_CLUSTER', false),
    
            'default' => [
                'host'     => env('REDIS_HOST', 'localhost'),
                'port'     => env('REDIS_PORT', 6379),
                'database' => env('REDIS_DATABASE', 0),
                'password' => env('REDIS_PASSWORD', null),
            ],
    
        ],
    
  3. 注册Illuminate\Redis\RedisServiceProvider:修改lumen/bootstrap/app.php

    $app->register(Illuminate\Redis\RedisServiceProvider::class);
    
    $app->withFacades();//同时启用Facades
    
    $app->withEloquent();//同时启用Eloquent
    
  4. 测试Predis是否中标启用:修改lumen/routes/web.php

    $app->get('/', function () use ($app) {
        //return $app->version();
        Cache::put('lumen', 'Hello, Lumen.', 5);
        return Cache::get('lumen');
    });
    

    页面输出:Hello, Lumen.

2.3 负载均衡 
冲网站流量及事实上要求,使用nginx当七层交换,把前端进来的用户要round-robin到后端的应用服务器。nginx支持容错转移,如果后端的某台应用服务器失效,nginx可将该台服务器暂时移有可用列表。 

四.Lumen中启用PhpRedis扩展

并且,由于负载均衡服务器位于合网站系统的极前端,一旦失效则全网站就瘫痪,所以该重点无与伦比。为保高可用,使用keepalived实现双双服务器的故障实时切换。 

  1. 安装PhpRedis:这是那官方参考文档 https://github.com/phpredis/phpredis#usage,某些用法或同Illuminate\Redis不同

    pecl install redis (有可能需要手动安装 autoconf,phpize依赖该工具)
    composer require illuminate/redis
    

    注意事项:该C扩展安装完后要改php.ini添加行extension=redis.so。如果php在cli模式下运行不察觉Redis,可能是盖若的php.ini文件没有找到,该文件为安配备项–with-config-file-path所指定,默认位于PREFIX/lib目录下,所以应以启动php时添加-c选项指定安排文件要php.ini所在目录。

  2. redis客户端配置:中心和被Predis,唯一不同之处在于lumen/vendor/laravel/lumen-framework/config/database.php中redis的client,’client’
    => ‘phpredis’

  3. 注册Illuminate\Redis\RedisServiceProvider:同于Predis
  4. 测试PhpRedis是否中标启用:同于Predis
  5. 此外一种植无需安装illuminate/redis包就会启用PhpRedis的更迭用艺术:

    1)修改lumen/bootstrap/app.php,添加如下代码:

    $app->singleton('redis', function(){
        $redis = new Redis;
        $redis->pconnect('172.17.0.3');
        return $redis;
    });
    unset($app->availableBindings['redis']);
    

    2)测试PhpRedis是否成启用,修改lumen/routes/web.php:

    $app->get('/', function () use ($app) {
        //return $app->version();
        app('redis')->set('lumen', 'Hello, Lumen.');
        return app('redis')->get("key");
    });
    

     

2.4
应用层。
使用ree+passenger+nginx作为rails
web服务器,passenger易于管理维护,而且同ree配合较好。所有应用服务器地位都等,每令服务器均发布总体的种类代码,不在效能及召开分布式,以好维护。 

2.5
数据库。
利用2台mysql,做master-master复制,配合keepalived实现大可用。 

2.6 缓存系统 
缓存系统分为一级缓存和二级缓存。一级缓存用于存储数据量不甚,但针对快要求大之缓存数据。二级缓存用于存储对速度要求相对比逊色,但存储量巨大的数据。 

一级缓存使用内存数据库redis,优点是快快,并作大。用于存储首页缓存数据,保存股票行情数据,以及配合redis-store作为rails默认页面缓存,等等。目前囤积数据大约2800久,使用内存100M。 

二级缓存使用文档型数据库mongodb,优点是询问功能强大,支持海量存储。用于存储部分消息内容,提高页面响应速度。目前囤积数据大约10万漫漫,数据文件大小为4G。 

2.7
文件系统。
使用glusterfs,以其本身的编制只是实现双机热备和单台服务器失效返回后文件的活动同步。用户上传的文书会自行地而保留于2台glusterfs服务器上。对应用程序来说,它们只是用文件保留于本地某个指定目录,glusterfs对以是透明底。而且其他一样高服务器单独失效都无会见指向用户发可察觉的震慑,失效的服务器返回后,glusterfs会计算2台服务器所保存文件之别,对反过的文本进行联合。 

2.8
异步和定时执行。
使用resque作为基础架构执行异步任务,以resque-scheduler尽定时任务。同样,也为双机互备来管不管遗失地出与推行任务队列。经过立马几个月之以,除了解决了有跟另外系统相互时竟之行堵塞问题,目前总的来说resque还是值得信赖的。 

3、技术选型 

以技巧路线及,团队有着无限可怜的自由度,因此我们可以遵循自己之意进行技能布局,而且好大胆地利用最新的技艺架构和缓解方案,在好公司支付任务之同时加强组织技术水平,紧跟业界技术潮流。 

3.1 网站使用rails
3开发,用到的重大组件和本如下。未注明版本号的,为新型版本。 

Ruby代码图片 3

  1. ree 1.8.7 rails 3.0.8    # 基础平台  

  2. rake 0.9.2  gem 1.8.5  bundler 1.0.14    # 基础工具  

  3. mysql2 0.2.7  ruby-oci8  activerecord-oracle_enhanced-adapter    #
    数据库让  

  4. nokigiri  yajl-ruby    # 解析器  

  5. authlogic  cancan    # 权限和验证  

  6. ckeditor  paperclip  rmagick    # 编辑器和图纸  

  7. redis-store 1.0.0.rc1  mongoid 2.0.2    # nosql  

  8. resque  resque-scheduler  eventmachine    # 异步和定时任务  

  9. capistrano  capistrano-ext    # 代码发布  

  10. open-flash-chart  formtastic  rspec  spork    # 杂项  

3.2 数据库。使用mysql
5.1。因为5.5注销了以文书中布局replication,只能手动命令执行,个人感觉比较累,不可知得服务器的无人值守。如果出同学找到了5.5机动配置的方案,还望赐教。谢谢。 

3.3 redis
2.2.8。因为官网说redis原生的cluster方案,有或以在2011年6月才出RC版,所以时咱们运用redis的master-slave机制,自己写了一个监理脚本,配合keepalived,实现两令redis服务器之间的数量并(replication)和容错转移(failover),以之来达成高可用。 

3.4 mongodb
1.8.1。mongodb自身发生原生的replset方案来贯彻数量并同容错转移,因此于mongodb的圈一直动用该方案,配置2台服务器即可实现强可用。 

3.5 glusterfs 3.2.0。使用原生的双机互备方案。 

4、项目管理 

第一欲的开从2010.11上马,到2011年三元上线,大致为2单月之年月。上线后还要经历了盖1独月,基本平稳达标目前底状态。纯代码约1万履行。开发人员4叫做。开发平台有ubuntu
desktop和windows
7,开发工具有aptana、netbeans、emacs等。对平台以及工具不举行要求,在dos下能够把生干好,也尽。 

4.1
源码管理。
 使用 git ,采用所谓的“稳定分支模式”。有3个重大的分:master、alpha、production。源码合并之次第一般情形下是master
-> alpha ->
production。master用于日常开支,alpha用于发布测试版本,production用于发布生产环境的业内版本。如果来hotfix或者feature的急需,再另起其他临时分段。每个开发人员对持有支行都独具全方位朗诵写权限,使用公钥认证的ssh访问源码库。 

4.2
发布管理。
 使用 capistrano 作为发布工具,结合capistrano-ext的multistage功能对几近独例外的揭示环境进行田间管理。并且做了bundler的capistrano模块对bundle
gems进行公布时之机动装管理,做到了测试版本和正规版本的一键化发布。在99%之状下未需要报到服务器另外做安排或者改动。 

4.3
项目管理。
 使用 redmine 作为项目管理平台,可以和git库有机地组合起来。 

4.4
测试。
 由于多数意义还是调动用别样平台或看行情数据库,逻辑比较简单,因此 rspec 用得不太多,仅于支付接口等有商业逻辑上以。这是项目时的一个缺点,以后会刻意加强测试点的代码量。 

5、未来扩张 

5.1
负载均衡的特性取决于接受请求的那台服务器的性能,nginx的出现还是叫人放心的。即使之后性能成为瓶颈了,可以就此重新好之服务器,或者更换硬件交换机,直至F5。 

5.2
应用层的扩充比较简单,只需要加应用服务器节点即可。负载均衡的nginx可以设置权重为抵消负载。 

5.3
mysql不极端好扩大,但要是前所谈,把负载尽量分散到nosql上,在百万PV级别,mysql也即管需扩大了。实在要推而广之,可以品尝做读写分离等方案,或等候几年后mysql搞定更美妙的档次扩展方案。 

5.4
redis和mongodb都比较便利水平扩展,多加服务器,做集群配置,即可分散流量增长负载。 

5.5
glusterfs也不无水平扩展能力,再与nginx结合直接出口文件,可承接较生流量。 

列为主架构就是如此,限于篇幅,很多地方都是一带而过。下同样步我准备写如下内容,留作个人积累与商号文档,包括可未杀: 

1、keepalived的配备与动,优缺点。 
2、rails 3的助益,个性化设置,存在的毛病和临时解决方案。 
3、redis和mongodb的主从复制架构,相关问题之化解方案,各自的特色及底蕴运用。 
4、glusterfs的布和行使。 
5、resque系列组件的使用,异步和定时任务尽。 

6、测试和产品多环境下之capistrano一键发布网。 

转自: http://www.iteye.com/topic/1058510 
此人绝对大牛了。。

何以对全Mongo后台有顾虑? 
nosql的见解和mongodb数据库毕竟是初东西,诞生时还无长,不象sql理论与mysql经过了久久的严峻考验。而且mongodb现在从未有过最多的顶尖实践,担心发生了问题无能够快解决。所以就算本人懂mongodb确实蛮平静十分是,但仍然不顶敢将订单和用户等主要数据存放于这个。另外现在mongodb还没有实际的管理工具标准,使用上有点有窘迫。 

然,仍然不可知否认mongodb确实好出彩,特别是同mongoid配合起来,用得稀顺手。 

之所以我们现在底开支理念是将数量存储于mysql,mongodb里的多寡只是mysql数据的复制与冗余,用这卖冗余来因空间更换时间。万一出现数未雷同,就因为mysql为按照向mongodb同步数据。这不过是我们集团时所使用的不二法门而已。

能够不能够于个网站连续,或者大概说哈
投入运行后更加到的题材。现在,很多口对Ruby 的运作效果产生死要命的疑团。 

因rails3的架更复杂,所以个人感觉要比rails2周转速度缓慢。从服务器的开行至页面的渲染,实测的日都要重新增长。特别是rails3的页面渲染,网站首页内容一经比较多以来,渲染速度几乎不可承受。 

自家无明白页面渲染的问题是rails3我的题材,还是我们在哪里没有设置好,一直尚未那个好地解决。目前为此了ree官方推荐的GC优化参数,另外更对首页划分partial,做片缓存,现在渲染时间在200ms左右。当然,我们尚养了一如既往有的无开片缓存的,是为了当着哪天老板问我们首页能不能够再快一些,我们再度将剩下的长缓存,这样每次工作职责都见面发生显着的功绩。。。。。。 

实际上无论是作为ruby,还是rails,当前的运行效果都够用。在网站以的层面,就算出现有的效率问题吗可以从软件和硬件等相继层面解决。与rails开发与护卫所节省的时间人力等重大成本比,解决这些题目都是值得的。当然矣,不引进用rails做凝聚、实时或连行运算。用最为确切的言语,做最符合的政工。

多年来着为定时任务而头疼。cron +
rake的CPU占用率实在是单问题。看了LZ的章决定尝试resque去。 
BTW,eventmachine还足以做定时任务吗? 

我们立刻选型的时节呢考虑了cron模式,但用cron来跑定时,与操作系统绑定太艰难,不便于发布与保安。用resque-scheduler,所有定时任务还写以一个安排文件里,清晰易懂便于维护,而且发布后单独待kill掉rescue-scheduler的常驻rake再重开,即可刷新定时任务规则,方便快捷。 

匪是故eventmachine做定时任务,它是根组件。resque-scheduler要以rufus-scheduler,rufus的定时发星星点点栽实现方式,一凡是plain方式,就是之所以sleep来举行loop,二便是em方式,如果系统遭到安了eventmachine,rufus会自动使用em模式。

每当服务器版本之选择上较奇怪,为什么选择用Ubuntu这个称霸个人桌面的服务器版? 
自己本着Ubuntu的记忆还仅待在个人版(从7.1届8.04)。 
怎么未考虑采用Centos?个人感觉无论由本更新,功能安全,还是以习惯及且使重好把。而且多机负载均衡也好处理些。 
除此以外,Mysql自身的载荷均衡也充分全面,但是打您文中好像没看出来有坏好之以? 

服务器发行本选择ubuntu
server,也终于一种个人爱好吧。作为rails的周转平台,无论是各种零件的设置或问题之化解,相对都比较顺利。至少就自我个人感觉,ubuntu似乎早就化为rails平台的标配,网上的学科以及演示大多数都是为ubuntu为根基之。我们啊早已于公司遗留的centos上安装过rails,有有题目要要命烦的。 

本子更新上,ubuntu已经休输于centos,可以说有过之而无不及。从功能安全达成,少安装点不必要之保证,iptable规则严格一点,时常自动更新内核,也就多了。至于下习惯,我们团队还是都重新习惯ubuntu的,毕竟开发桌面以ubuntu居多,都是平等家的儿女,desktop和server是一脉相承的。多机负载均衡我觉得centos和ubuntu没什么本色上之界别,不清楚你所指凡啊方。 

你说之mysql的载重均衡,是指mysql ndb
cluster吗。我们也评估了她,一凡是感到最复杂,对咱的色有些大材小用,二是咱们看罢部分网上的评论,很多所以了之人头要持保留态度的。就算是mysql
proxy之类的读写分离方案,仍然感到稍复杂。似乎mysql原生的扩大方案还让丁非是怪畅快,所以索性就是只用replication做强可用了,实质上要单机。前面我吗说罢,对咱们的项目以来,结合nosql,单机也足够用了。如果实在而推而广之mysql,倒不如直接用handler_socket来得彻底。 

应也是为着寻求尽量贴合项目实际上的方案吧,要是公司报告我们召开个一千万PV的,我们吧就算不用现在立套方案了。

是呀,看了受益多,公司内部纵使咱们team在做ruby on
rails尝试,都设从头积累呀,虽然于费心,但是好有趣,风险及老有些,都是指向企业间的田间管理网上开尝试,允许出错。另外,公司评论都达成mongodb了,15华服务器的范围,貌似在境内是极度充分之了咔嚓?不过我们ror组还未曾因此mongodb,语言转换新的尽管死麻烦了,数据库再转移了就是会见疯狂掉的。 

希望会来看楼主更多之心得,我哉心甘情愿当ror使用中享用部分东西,希望对境内ror会有所推动。我们已经在跑的同一贵ror服务器是apache2.0.x+passenger,不是无比漂亮的烘托,以后会重调整,数据库是MySQL,前端就加以了只memcached,因为未是召开WEB,是开的API用的,每天接口调用在240万软左右,等负荷高了肯定还得优化系统、加服务器呀。数据库方面读取都cache在memcached里面了,写操作是经文件缓存来举行的,比较简单:每个数据insert或者update等要写一个文书文件,不用加锁,另外有进程定时扫描这些文件,入库后删之,所以MySQL负载很容易。

你们在front-end server和db-server这里还用keepalived来保管高可用性.
这个方案变成熟么? 对技术人员的求怎样? 

keepalived本身是较成熟的,在front-end用keepalived来举行大可用,也毕竟比较成熟。不过个人感觉keepalived本身来一些局限性,比如服务器完全挂掉的时keepalived很无用,但若服务器常规,但本地的nginx服务无响应,就比较累了。keepalived虽然为发生检测本地服务之模块,但并无是平检测到地方服务失效就即切换至外一样台,不是自个儿眷恋使之效益。我研究了一段时间也没有找到解决方案,不理解是自我尚未找到,还是当就是这样。 

keepalvied配合mysql的master-master复制来做强可用,是自身要好雕刻的。做截止了随后于网上同搜,才发现已有人这样做了。但这个方案并无是颇熟,主要是盖mysql的复制是发生相同段落极小之时刻间隔的,如果当mysql尚未同完成时,keepalived就切换了骨干,容易导致mysql的id重复。当然就为堪化解,比如安自增id的肥瘦即可,不过自己不喜欢这样。但总的说来,keepalived配合mysql,不是怪熟。 

本我是想经过修改activerecord来落实mysql
master-master的活动服务转移,后来发比累,所以即便从未举行,省了只事用keepalvied来贯彻。如果真的如做保险的mysql高可用,还是建议于rails端解决,或者是故更好的法门消除个别高mysql数据并的机要冲突,比较好有。其实最好之尚是原生方案,象mongodb那样的,在数据库的圈即便避免这题目,这是无与伦比良好的缓解方案。 

针对技术人员没什么太胜要求,keepalived比较简单,文档也终究加,一般的技术人员都能够看明白并且配备成功。

1、要说及“独立”安装这么一效系统,确实是生接触复杂,但为无是特意困难。只要拿装文档写详细了,按照步骤来安装服务器,应该问题非要命,无非就是是有的apt-get之类的,再加上把配置。把安排文件备份好了一直回复就很快了。代码部署是故capistrano写的,几独指令就搞定,也未设有困难。比较费心的凡确实了解当下套系统,而且产生了问题能够亮在哪儿,这便扣留个人的福祉了。大牛私奔总是比头疼的从事,所以我们团的目标是将各一个人犹养成为大牛,私奔几个都不怕。 

2、关于业务模式以及流量的推理,看得出来你特别有经验,只是有些赞我们了。我们是独稍网站,刚上线没多长时间,还从来不从头特别范围扩,流量异常有些。但是就算流量大了,我们啊无太思念行使静态页面这种艺术。因为毕竟网站工作还不曾成型,需求变动甚快。互联网业务的表征就是是形成,有或今天底静态页面,明天即使格外范围变更和调动,或者突然要求加上很多动态的情节。而且形态金融情报这种比正规的网站,一般也到非了新浪那种有必不可少采取静态页面的档次。因此在相当丰富的相同段子时日内,我们尚从未设想静态页面。单纯的新闻页面,加上缓存,几高服务器支撑一下要么问题不大的。 

3、gluster确实目标比较远大。而且当初咱们选用它,也是为其不转操作系统内核,所以还怎么折腾呢未会见指向网造成致命的震慑。我们脚下因此的严重性还是gluster的replication高可用的那么片效益,有一些不怎么题目(比如没有文档中所说之自行同步),但当下总的来说还是可用的。至于下会无会见就此到distributed和striped等横向扩张,到时再说。说不定到时有钱了不畏直达硬件了。走相同步看同样步吧。 

4、你的架不克说简陋,其实最好简单易行的才是无限实用的。我因此做的这么复杂,也是为我立刻丁好折腾,平时有空就提升个服务器再开下什么的,所以才做个尚未单点的架。个人爱好而已。呵呵。 

5、nfs当然非常保险,只是自己无找到怎么用nfs做大可用,一华服务器本身以未放心,所以就是找到了gluster来举行是,而且在gluster上为是故底nfs协议,兼容性不错。至于说看文件的快,这个我们从来不经过gluster的read接口来做,我们只是用gluster来描写文件,下载的时绕了gluster直接用nginx读取本地文件,速度达到暂时尚未问题。 

6、请问一下若的mysql
5.5主备,是怎开的。5.5休可知于安排文件里描写主备复制的参数了,你是为此脚论开的,还是起步起来以后更登录mysql敲命令?

发表评论

电子邮件地址不会被公开。 必填项已用*标注