Dubbo

Dubbo在项目中的作用

分布式服务架构

  1. 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。
    并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。

  2. 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
    这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。

  3. 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
    为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。
    其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

架构

角色

  1. Provider: 暴露服务的服务提供方。
  2. Consumer: 调用远程服务的服务消费方。
  3. Registry: 服务注册与发现的注册中心。
  4. Monitor: 统计服务的调用次调和调用时间的监控中心。
  5. Container: 服务运行容器。

调用关系

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Paxos

作者介绍

1982,Lamport 提出了一种计算机容错理论,并于1900年论证。
这是一种
基于消传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。

时间时钟、面包店算法、拜占庭将军及paxos算法的创建性容错

paxos的目的

提高分布式系统容错性的一致性算法

核心

一致性算法

算法三个角色:

Proposer
Acceptor
Learner

规则

paxos 描述:

参与者之间可以进行通信,可以记录一些信息,来确定最终的值
消息内容不会被篡改

知行学社的分布式系统与Paxos算法 对paxos算法核心思想的描述

  • 在抢占式访问权的基础上引入多acceptor

  • 保证一个epoch,只有一个proposer运行,proposer按照epoch递增的顺序依次运行。

  • 新的epoch的proposer采用后者认同前者的思路运行。

  • 在肯定旧epoch无法生成确定性取值时,新的epoch 会提交自己的取值。不会冲突。

  • 一旦旧epoch形成确定性取值,新epoch肯定可以获取到此取值,并且会认同此取值,不会破坏。

MAC下完成人脸检测代码环境构建

目的

工作中用到图片的截图,但在使用过程中出现了一个尴尬的问题,就是截图时,有的人没有了头
,只留下身子.

解决方式

通过代码来检测出头部所以位置,然后来决定载哪些区域(目前,只是对一个人进行剪切。

具体方案

  1. 找到一个合适的类库来进行人头位置检测

     _python-opencv_
  2. 使用python 对人裁剪范围进行处理(GraphicsMagick)得到想要的区域

正题 如何在MAC上安装开发环境

利用 python-opencv 库
http://www.pyimagesearch.com/2015/06/15/install-opencv-3-0-and-python-2-7-on-osx/


cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
-D PYTHON2_PACKAGES_PATH=~/.virtualenvs/cv/lib/python2.7/site-packages \
-D
PYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.10/Frameworks/Python.framework/Versions/2.7/bin
\
-D PYTHON2_INCLUDE_DIR=/usr/local/Frameworks/Python.framework/Headers \
-D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..

http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html#linux-installation


brew tap homebrew/science
brew install opencv3

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html

第N次百望山到植物园

为什么是N次

2015年已经多次走这样同一个路线

为什么第N次记录了一下

之前来走的时候都是正常13公里,到植物园进行小息游园后坐公交回家。但是这次遇到了一些事情,也许今后不会再次走这条路,故在此进行记录

百望山路段

不得不说百望山发展之迅速,从去年到今天常走的路基本上都已经修成了马路,真的是‘大功’ 一件,这样子人们就不用走泥路了,也不用那么接地气了 ~

百望山到黑山头路段

这段路不算长,也就二三公里的样子,不过曾经一个人走过N次。清醒的记得去年走的一幕幕,黑黑的,阴阴的,凉凉的,热热的,鸟儿到处都是,有时甚至还有蛐蛐在歌唱。真可以说精神上的放松。期间老婆也走过一两次,由于全程走下来比较累,基本上都是我一个人在走。
基本上每次走完,一周都感到比较轻松。

黑山头到冷泉村防火道

这路其实都一两个比较大的景点,也许只有我自己认为那算做景点吧!

山泉

若想去山泉取水,每次要多走2公里。一般情况下会想去但是由于后面路程的问题会选择赶路。这次我去了,其实也是被迫了基本上。嘿嘿

天泉寺

今天才知道这个寺届是 天泉寺 之前走到这里总感觉是一片废墟,从没想过这地如此的大。这次到这里,发现有人在整修,并且已经把原来的地基轮廓都已经整理出来。
在这里呆了差不多一个小时,感叹时间的厉害,也感叹我们在时间长流中是那么微不足道。
后来又来到寺庙傍边的佛塔傍边,从佛塔的视角可以看清楚整个寺庙的全景。于是我便非常想知道,这个寺庙到底经历了哪些历史…















冷泉村到植物园

这次走了一半,在去植物园的路已经被我们解放军战士把守,说是军事重地,人民不能进入。我问了一下,他们说可以从别的地方翻跃过去。同时我也看到有一帮人从这些士兵可见的范围内进行翻跃围墙。有一种说不出来的心情充上心头,但感觉在我们体制下好多类似的事情发生,从而又感叹了一些国家怎么样才能提高全民素质等等事情~~~~

我可不想去翻墙,我还是回寺庙再去看看,同时去喝些泉水,也好久没有去泉眼了。
今天泉水非常多,有一位好心的兄弟给帮我搞了一水袋。我便带着回家了。

小结

不知道下次什么时候才能再进行穿越,希望放开这块路线供大家穿越。

图片处理环境构建

问题

对存储的文件进行并发处理,由于处理的图片量比较大。
图片处理又比较耗内存,为防止影响正常的服务,故将其与业务服务分开部署

方案

python+uwsgi+imagemagick

环境安装:


1.配置
16Core,16G内存,50G硬盘
2.端口
13814(fcp),8010(http)
3.安装 graphicsmagick
jasper-1.900.1.zip jpegsrc.v9a.tar.gz

wget http://www.imagemagick.org/download/delegates/jpegsrc.v9a.tar.gz
wget http://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.1.zip
gm 命令ln /usr/local/graphicsmagick/bin/gm usr/bin/gm

4.装音频插件和字体
http://my.oschina.net/ethan09/blog/372435?fromerr=WsZSucMx
安装微软雅黑字体

5.python版本升级
http://blog.csdn.net/jcjc918/article/details/11022345 由于django必须要用2.7,所以这里要进行升级
注意修改完后 要修改/usr/bin/supervisord,/usr/bin/supervisorctl 的头为/usr/bin/python2.6

6.重新安装pip和c++库
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

安装c++库
sudo yum install GraphicsMagick-c++-devel
sudo yum install boost-devel
7.安装python插件

sudo pip install -r requirements.txt
requirements.txt内容
Django==1.9.7
beautifulsoup4==4.4.1
protobuf==2.6.1
pgmagick==0.6.2
uWSGI==2.0.13.1
wsgiref==0.1.2
django-log-request-id==1.0.0

8.安装nginx
yum install nginx
9.安装uwsgi
sudo yum install uwsgi
sudo yum install uwsgi-plugin-python

nginx配置

location / {
uwsgi_pass unix:///tmp/uwsgi.sock;
include /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
}

client_max_body_size 20M;

10.安装图片处理服务
cd /opt/fs/
git clone http://git.firstshare.cn/Qixin/FSPythonWSGIProcess.git
cd FSPythonWSGIProcess

uwsgi --ini online_uwsgi.ini --buffer-size 20971520 --daemonize ./logs/uwsgi.log

11.异常
*** Starting uWSGI 2.0.12 (64bit) on [Tue Jun 14 16:36:20 2016] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-16) on 02 January 2016 19:53:13
os: Linux-2.6.32-573.8.1.el6.x86_64 #1 SMP Tue Nov 10 18:01:38 UTC 2015
nodename: vlnx160170.fsceshi.com
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /home/wans/FSPythonWSGIProcess
writing pidfile to /tmp/FsPythonWSGIProcess.pid
detected binary path: /usr/sbin/uwsgi
your processes number limit is 1024
your memory page size is 4096 bytes
detected max file descriptor number: 60000
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/uwsgi.sock fd 4
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 1476277 bytes (1441 KB) for 10 cores
*** Operational MODE: preforking ***
*** no app loaded. going in full dynamic mode ***

关闭nginx ,启动uwsgi后再启动nginx

优化点:
1.调整nginx
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;
2.#cluster
upstream backend{
server unix:///tmp/uwsgi.sock;
server unix:///tmp/uwsgi1.sock;
server unix:///tmp/uwsgi2.sock;
server unix:///tmp/uwsgi3.sock;
}

location / {
include uwsgi_params;
uwsgi_pass backend;
}

问题总结:
1.yum安装遇到如下类似问题:
yum install uwsgi
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* extras: mirrors.btte.net
* updates: mirrors.163.com
No package uwsgi available.
Error: Nothing to do
解决方案,添加epl至yum的源即可:
yum install http://mirrors.isu.net.sa/pub/fedora/fedora-epel/7/x86_64/e/epel-release-7-6.noarch.rpm
参考文档:https://fedoraproject.org/wiki/EPEL/zh-cn