Fastdfs分布式文件系统的应用

作者:JerryXia | 发表于 , 阅读 (0)
我们在实际项目中常常遇到这样的应用场景,用户需要上传图片,小视频或者其它文档,这些文件的大小一般在10M以内。它们很多,而且对用户来说可能还很重要,而且可能还要经常被访问,被下载,如何妥善保存这些文件就是一个需要解决的问题。
解决这个问题需要两点:一个是文件冗余备份,保证用户的文件不会丢失,另一个是高可用性,也就是说当文件服务器出现故障的时候,可以立刻让备份服务器为用户提供服务,使用户感觉不到有什么异常。
那么我们不妨分析下有哪几种解决方案:
1.粗放型: 
直接作为blob字段存数据库里,利用数据库的容灾备份和HA来保障文件安全。其实这种方案是最安全的,但是显然数据库不是用来做这个的,因为太占数据库空间。不过由于其安全性最高,笔者在之前某个项目中曾经被要求这么干,因为保存的是客户的合同文件。但是类似社交网络的图片文件是没必要这么做的。
2.简约型: 
直接存文件系统。如果有多台应用服务器同时提供文件上传服务,那么就准备一台文件服务器,分别挂载到所有应用服务器的指定路径下,实现多台应用服务器的文件写入,同时还可以配置读取静态文件更高效的nginx或者lighttpd来负责文...阅读全文

Step by step玩转RPC

作者:JerryXia | 发表于 , 阅读 (0)
RPC是实现SOA的基础,我在项目中多次玩过dubbo等SOA框架了,这种远程方法调用的方式不仅有趣而且有非常重要的现实意义。可以让我们把庞大的系统拆分成许多模块,每个模块又可以根据不同的压力启动不同数量的实例,模块间通过RPC透明地通信,从而将集中式的系统改造成分布式应用提高其扩展性,优化硬件资源利用率。
闲来无事,我们也来一步步手动实现RPC来感受下其中的乐趣吧。
第0步:写服务甭管是否是远程方法调用,写两个可以调用的服务先。


很简单,一个是打招呼服务,两个方法,一个say hello,一个say byebye。另一个是计算服务,一个加,一个减。
另外,再整个简单的线程池来提高下资源利用率
第1步:socket通信实现RPC1.服务端发布服务 
分别把GreetingService注册到3456端口,CalculateService注册到6543端口。
2.客户端订阅服务 

3.管理发布和订阅的框架 

4.服务发布线程 
服务发布的实质就是创建ServerSocket,监听服务发布的端口,当接收到请求时,根据请求中的方法名和参数动态调用方法,并把...阅读全文

react redux isomorphic SSR immutable router test node

作者:JerryXia | 发表于 , 阅读 (0)
React开源一年多以来,发展迅猛,已经不再是一个单纯的前端组件化开发框架,而是形成了一套完整的生态系统。
一直想写一个充分应用react生态系统的boilerplate,但又不想仅仅写一个没有任何功能的空壳。正好之前看到慕课网有Mater Liu贡献的react画廊应用教程,兼具学习型和实用性。那么我就从这里开始吧!
完成教程内容Mater Liu的教程讲得很详细、透彻,我一节我就一笔带过了。唯一需要注意的是教程所使用的yeoman generator  
generator-react-webpack
目前的版本已经全部改用ES6的实现了,不过对聪明的你来说应该不是问题,对吧?
通过教程的学习,我们已经用纯react完成了一个很漂亮的图片画廊应用,接下来让我们以此为基础去探索更广阔的react生态系统吧。
reduxRedux 是 JavaScript 状态容器,提供可预测化的状态管理。笔者在实际工作中充分体会过使用redux的便利性。通过他来管理单向数据流可以让页面的每次状态变化都有案可查。配合上devtool在应对庞大项目,页面状态频繁变化的情况中,他可以帮助你理顺...阅读全文

flume与语音交互领域日志数据的ETL

作者:JerryXia | 发表于 , 阅读 (0)
我厂是一家国内知名的语音交互方案提供商。我厂的车联网客户端每天共计能生成上百G的语音识别、语义解析、对话、NLP等各种环节的日志。通过这些数据可以挖掘出很多有价值的信息。但是之前我厂一直没有对这些日志进行收集和分析,诚为可惜!
笔者于是承担起了这个任务。本文将着眼于ETL部分,介绍语音识别日志的收集与解析过程,以及分享我们在flume使用中的一些经验、教训以及对flume的改进方案。
ETL部分架构设计我们收集的这部分日志来自公司的各种提供语音交互服务的车载智能产品,说白了都是物联网产品,需要这些客户端自己上报日志,目前我们在云端部署了一个web server集群来接收它们。当用户结束一次对话,设备进入休眠时就会上报。这套web server使用目前web届的新秀openresty技术开发。该技术直接将lua脚本嵌入nginx服务器执行。充分利用了nginx服务器的异步非阻塞特性,对高并发的支持非常好,而且系统资源占用少,非常轻量。
收集节点拿到上报的日志后包装一些元数据,之后通过kafka传输到大数据平台。引入kafka是出于以下几点的考虑:
日志采集后的处理方式多样化,以后...阅读全文

Mycat与数据访问层

作者:JerryXia | 发表于 , 阅读 (0)
将数据库按业务拆分主从复制与读写分离分库分表不过这些策略往往会对我们现有的业务逻辑造成侵入,使得应用层不仅要考虑业务逻辑的设计实现还要考虑到底层复杂的拆分策略,这实在是一件头疼的事情,好在有一些现成的中间件可以帮我们实现一个统一的数据访问层,从而向应用层透明地提供数据服务。
这些中间件有MySQL Proxy,Ameoba,Cobar,Mycat。其中Ameoba,Cobar,Mycat是一脉相承的,关于他们之间的故事和优劣对比,这里不细说,网上有很多文章。
总之,Mycat是目前功能最强大也是社区最活跃的。官方网址,支持SQL92标准。
他们这两天刚刚发布了1.5.1版本,不过笔者还是用的1.4版。release包下载地址,源码地址。
下面我们来玩玩mycat。部署之后有几点要做的:
添加MYCAT_HOME到系统环境变量将主机名加入/etc/hosts文件(否则启动报错)修改conf路径下的wrapper.conf文件,修改wrapper.java.initmemory和wrapper.java.maxmemory以适应服务器的配置之后就是mycat的3个核心配置文件:
...阅读全文