互联网创业服务器运维工具集 - 米聊服务器端开源工具选择实践

javale

贡献于2012-11-29

字数:0 关键词: 电话/通讯/IM聊天

互联网创业服务器运维工具集 米聊服务端开源工具选择实践 陈臻(54chen)@velocity 2011 创业公司 事多枪少 怎么办? 开 源 米聊团队 创立于2010/11 <3人 米聊服务器端所使用的开源技术/项目: Maven Nexus Rose Nginx Resin Quercus Zookeeper Hadoop Riak …… 如何hold住他们? 选择原则: 1)大公司在用的; 2)大公司没在用代码级别搞得定的。 细节是魔鬼 三个代表: 1)解决什么问题? 2)如何解决? 3)url在哪里? 一个一个来看 Nginx挡在前面,解决了平滑上线、快速接入的问题 细节: 静态过期设置 Upstream fallback设置 Error log定期检查 离用户最近的地方 静态过期设置 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 15d; } upstream fallback设置 upstream backend_openapi.miliao.com { server 192.168.1.99:8089 weight=1 max_fails=2 fail_timeout=10s; #连续 失败2次 暂时停止使用10s server 192.168.1.100:8089 weight=1 max_fails=2 fail_timeout=10s; } 细节 Errlog里的常见问题 [error] 4597#0: *512 readv() failed (104: Connection reset by peer) while reading upstream 上游在过程中干掉了链接,一般情况是后端的代码有问题。 相关的url http://wiki.nginx.org/ http://wiki.nginx.org/Resources http://wiki.nginx.org/HttpProxyModule http://code.google.com/p/nginxsrp/wiki/ NginxSRPProtocol http://www.evanmiller.org/nginx-modules-guide- advanced.html 它帮忙解决了我们的代码跑在哪里 Resin CAUCHO公司的产品 application server 对servlet和JSP提供了良好的支持 resin自身采用JAVA语言开发 不选tomcat的原因 OOM参数 MAT协助分析问题 -XX:+HeapDumpOnOutOfMemoryError MAT=Memory Analyzer Tool Resin注意事项 Quercus CAUCHO公司的产品 纯Java开发的一个PHP5引擎 基于开源授权协议GPL发布 性能超群 可以简单使用java扩展函数 不选php-fpm的原因 Mysql连接编码问题 com.caucho.quercus.lib.db.JdbcConnectionResource: 94 348 com.caucho.quercus.lib.db.Mysqli:229 修改上述文件的hard code位置为utf8 Quercus的问题 地址与引用的问题 避免php里超过3层的引用 $obj->some->some->dosome() Resin已经内置了quercus,修改代码注意替换 http://www.caucho.com/ quercus记录:php和java的混合型项目建立手记 http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html 相关url ROSE Rose:来自人人网的充分使用spring的框架 解决了团队 整齐战斗的 问题 ROSE 还在更加方便使用中。。。 简单DAO Sharding(需要加工) Restful规范 Portal pipe:类似facebook big pipe的东西,内部支持多线程运行。 ROSE 简单例子,经得起历史的考验 Portal/pipe ROSE 相关url http://code.google.com/p/paoding-rose/wiki/Rose_SJ 由facebook带来的thrift解决了内网高效消息传递的问题 跨 语 言 跨 语 言 .thrifty文件定义接口自动生成代码 多语言(php不能作服务端) 接口版本兼容最佳实践 跨 语 言 Thrift简单例子 #!/usr/local/bin/thrift --gen java namespace java com.chen service Hello{ i32 hello() } thrift --gen java chen.thrift 跨 语 言 相关url http://thrift.apache.org/ thrift最佳实践:版本与兼容 http://www.54chen.com/_linux_/thrift-versioning-compatibility.html http://www.54chen.com/_linux_/thrift-quick-start.html 跨 语 言 由facebook带来的scribe解决了大量日志收集的问题 Scribe:分布式日志系统 依靠Thrift传输日志 跨 语 言 Scribe与thrift版本的问题 Thrift升级快 已经0.7.0? Scribe慢 良好搭配:thrift 0.5.0 跨 语 言 Scribe与log4j使用举例 cd facebook-scribe-2ee14d3/if/ thrift -r -I ../../thrift-0.5.0/contrib/(这里需要指到你的thrift的源码目录) -gen java scribe.thrift 产生java客户端 继承org.apache.log4j.AsyncAppendert 和 org.apache.log4j.WriterAppender完成 异步打log的过程。 TSocket sock = new TSocket(new Socket(scribeHost, scribePort)); transport = new TFramedTransport(sock); TBinaryProtocol protocol = new TBinaryProtocol(transport, false, false); client = new scribe.Client(protocol, protocol); String message = String.format("%s %s", hostname, layout .format(event)); LogEntry entry = new LogEntry(scribeCategory, message); logEntries.add(entry); client.Log(logEntries); 跨 语 言 相关url https://github.com/facebook/scribe 分布式日志系统scribe使用手记 http://www.54chen.com/java-ee/log-server-scribe-helper.html 跨 语 言 Scribe收集的日志怎么分析? 二者解决了大量日志和千变万化的分析挖掘需求 跨 语 言 Scribe日志写入hdfs与hive的协作还有些bug Scribe->file->crontab->hive->loadfile 跨 语 言 迁移hive及hadoop nn注意事项 Metadata保留在DB中,需要自行修改 update DBS set DB_LOCATION_URI=REPLACE(DB_LOCATION_URI,'old host','new host'); update SDS set LOCATION=REPLACE(LOCATION,'old host','new host'); 跨 语 言 相关url hadoop hive安装手记 http://www.54chen.com/_linux_/hive-hadoop-how-to-install.html 用hadoop hive协同scribe log用户行为分析方案 http://www.54chen.com/java-ee/hadoop-hive-scribe-log.html 解决了项目依赖问题,使新人入手成本低 遇到的问题 Jdk7下各种诡异问题 解 决 了 仓 库 可 视 化 , 傻 瓜 化 必 须 整 体 作 战 Nexus 的 问 题 Nexus 里的snapshot 为什么总是旧的 单个目录下文件过多 打开nexus 的自动清理 Nexus 的 问 题 Nexus 里的snapshot 为什么总是旧的 login->scheduled tasks->add 相 关 url maven项目代码质量检测工具sonar使用手记 http://www.54chen.com/java-ee/open-source-quality- management-platform-sonar-notes.html http://m2eclipse.sonatype.org/ http://maven.apache.org/ http://nexus.sonatype.org/ Hudson 持续构建工具 解决了自动编译发布snapshot包到maven库 sonar 项目代码质量检测工具 解决了静态代码质量检查,提升代码质量 Maven+hudson+sonar 自动编译打包质量评估 团队成员有空时就看看一sonar 具体设置 具体设置 build中的goals and options -U clean package deploy sonar:sonar 代码检测到sonar中 具体设置 需要在hudson所在的机器设置.m2/setttings.xml sonar true jdbc:mysql://maven.n.miliao.com:3306/sonar? useUnicode=true&characterEncoding=utf8 com.mysql.jdbc.Driver sonar sonar http://maven.n.miliao.com:8888 相关url maven项目代码质量检测工具sonar使用手记 http://www.54chen.com/java-ee/open-source-quality-management- platform-sonar-notes.html 持续构建工具hudson使用手记 http://www.54chen.com/java-ee/ci-tool-hudson-usage.html Riak解决了kv存储的一些需求 basho(相扑)是一家美国的技术公司,专营数据存储和管理软件, 11年6月30日获得了750万美元的融资。basho将riak开源,通过收 取riak的维护和管理界面软件的使用费用来赚钱,和resin的公司类似。 Riak: Erlang开发 代码量少 标准的dynamo实现 Riak 0.14.2 java client存在一点bug 现在已经是1.0版本 优先使用leveldb 线上使用0.14.2基本0维护 Riak java client example private DomainBucket getDomainBucket(final IRiakClient client, String bucketName) throws RiakRetryFailedException { final Bucket b = client.fetchBucket(bucketName).execute(); return DomainBucket.builder(b, History.class).mutationProducer(new MutationProducer() { public Mutation produce(History o) { return new HistoryMerger(o); } }).returnBody(true).withResolver(new MergeHistoryResolver()).retrier(DefaultRetrier.attempts(3)).build(); } 这是一个使用java client的例子,使用了pb协议,里面有:一个叫History的实体;不 同的bucket保存不一样的数据,保证不冲 突;MergeHistoryResolver为冲突时解决 办法; HistoryMerger为保存时对现存数据的处理办法(客户端做append操作)。官 方文档大多是http json的,性能不高。 相关url http://www.54chen.com/tag/riak http://basho.com/resources/downloads/ 解决线上进程自动重启远程启停 它适应的进程 Supervisord是用Python实现的一款非常实用的进程管理 工具,在批量服务化管理时特别有效。 非deamon进程 最简配置 [program:xxxservice] command=启动命令 directory=工作目录 Web化管理进程 相关url 用supervisord管理杂乱的服务 http://www.54chen.com/java-ee/supervisord-manage-service.html 解决监控的问题 ganglia的理想汇报过程 ganglia的问题 多播可能存在风暴 拖死过华三交换机 相关url http://ganglia.sourceforge.net 以上是过去一年的回顾, 我们正在成长中… 谢谢! http://54chen.com 加入小米:czhttp@gmail.com

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档