第一天
分布式架构示例图:
集群:同一个工程部署到多台服务器上。
分布式架构:把系统按照模块拆分成多个子系统。(每个子系统都是一个工程,根据需要运行在不同的tomcat上)
分布式架构优点:
- 把模块拆分,使用接口通信,降低模块之间的耦合度。
- 把项目拆分成若干个子项目,不同的团队负责不同的子项目。
- 增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
- 可以灵活的进行分布式部署。
分布式架构缺点:
1、系统之间交互需要使用远程通信,接口开发增加工作量。
2、各个模块有一些通用的业务逻辑无法共用。
SOA架构:Service Oriented Architecture面向服务的架构。也就是把工程拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。
商城项目架构:
分布式架构和SOA架构区别:分布式架构一个子系统包括前端后端,SOA架构的后端就是所有的服务,前端需要什么服务直接引用即可。
maven搭建项目工程:
第二天
由于宜立方商城是基于soa的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。
如何实现远程通信?
1、Webservice:效率不高基于soap协议。项目中不推荐使用。
2、使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。
3、使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。
技术的发展:
Dubbo就是资源调度和治理中心的管理工具。
dubbo架构:
Zookeeper是java开发的可以运行在windows、linux环境。需要先安装jdk。
安装步骤:
第一步:安装jdk
第二步:把zookeeper的压缩包上传到linux系统。
第三步:解压缩压缩包到usr/local
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local
第四步:进入zookeeper-3.4.6目录,创建data文件夹。
第五步:把conf下的zoo_sample.cfg改名为zoo.cfg
[root@localhost conf]# mv zoo_sample.cfg zoo.cfg
第六步:修改zoo.cfg中的data属性:dataDir=/root/zookeeper-3.4.6/data(就是data文件夹的路径,在data文件夹下执行pwd即可获得)
第七步:启动zookeeper
[root@localhost bin]# ./zkServer.sh start
关闭:[root@localhost bin]# ./zkServer.sh stop
查看状态:[root@localhost bin]# ./zkServer.sh status
注意:需要关闭防火墙
将商城工程改造为soa架构
拆分工程:
1)将表现层工程独立出来:e3-manager-web
2)将原来的e3-manager改为如下结构
e3-manager(pom)
|--e3-manager-dao(jar)
|--e3-manager-interface(jar)
|--e3-manager-pojo(jar)
|--e3-manager-service(war)
服务层工程:
第一步:把e3-manager的pom文件中删除e3-manager-web模块。
第二步:在eclipse工作空间文件夹内,把e3-manager-web文件夹移动到e3-manager同一级目录。
第三步:e3-manager-service的pom文件修改打包方式成如下
<packaging>war</packaging>
第四步:在e3-manager-service工程中src/main下添加webapp/WEB-INF/web.xml文件
第五步:把e3-manager-web的配置文件复制到e3-manager-service中。
删除springmvc.xml
第六步:manager-service的web.xml 中只配置spring容器。删除前端控制器
第七步:发布服务
1).在e3-manager-Service工程中添加dubbo依赖的jar包
2).在spring的配置文件中添加dubbo的约束,然后使用dubbo:service发布服务。
表现层工程:
用maven方式导入e3-manager-web工程进行改造
第一步:删除mybatis、和spring的配置文件。只保留springmvc.xml
第二步:修改e3-manager-web的pom文件,
- 修改parent为e3-parent
- 添加spring和springmvc的jar包的依赖
- 删除e3-mangager-service的依赖
- 添加dubbo的依赖
- e3-mangager-web添加对e3-manager-Interface的依赖。
第三步:修改springmvc.xml,在springmvc的配置文件中添加dubbo服务的引用。
第四步:在e3-manager-web工程中添加tomcat插件配置。
dubbo监控中心
需要在linux服务器上安装tomcat,然后部署监控中心即可。
1、部署监控中心:
把dubbo的war包部署到Linux上
[root@localhost ~]# cp dubbo-admin-2.5.4.war apache-tomcat-7.0.47/webapps/dubbo-admin.war
- 启动tomcat
- 访问http://192.168.25.167:8080/dubbo-admin/
用户名:root 密码:root
如果监控中心和注册中心在同一台服务器上,可以不需要任何配置。
如果不在同一台服务器,需要修改配置文件:
/root/apache-tomcat-7.0.47/webapps/dubbo-admin/WEB-INF/dubbo.properties
分页工具遇到一个bug,一直提示PageInfo类找不到,使用电脑百度尝试了很多方法都无法解决,结果用手机搜了一下,第一个搜索结果就解决了这个问题。解决:把maven仓库的pagehelper文件夹删除,重新maven install工程pagehelper即可
第三天
nginx安装:
- 需要安装gcc的环境。yum install gcc-c++
- 第三方的开发包。
- PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
- zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
- openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
第一步:把nginx的源码包上传到linux系统
第二步:解压缩(不需要指定目录,下面的命令会指定安装目录)
[root@localhost ~]# tar zxf nginx-1.8.0.tar.gz
第三步:。进入nginx-1.8目录,执行如下命令:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
第四步:make(编译)
第五步:make install
启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录。否则启动nginx会报错。在usr/local/nginx/sbin下执行:[root@localhost sbin]# mkdir /var/temp/nginx/client -p
启动:
进入usr/local/nginx/sbin目录[root@localhost sbin]# ./nginx
关闭nginx:[root@localhost sbin]# ./nginx -s stop
推荐使用:[root@localhost sbin]# ./nginx -s quit
重启nginx:
- 先关闭后启动。
- 刷新配置文件:[root@localhost sbin]# ./nginx -s reload
查看进程,确定nginx启动:
ps aux|查看所有进程
ps aux|grep nginx 查看和nginx相关的进程
浏览器输入:部署nginx机器的ip(默认80端口)(有的浏览器会加上https,不要s)
nginx通过端口区分不同的主机:
使用一个ip+不同端口来访问不同的服务
usr/local/nginx/conf/nginx.conf中添加一个服务:
复制一份html来区分两个端口:
重新加载配置文件:[root@localhost nginx]# sbin/nginx -s reload
本地访问:ip:+端口号81
nginx通过域名区分主机:
修改windows的host文件来映射域名和ip:
添加服务:
访问:
nginx实现反向代理
两个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容。两个域名是www.sian.com.cn和www.sohu.com
第一步:安装两个tomcat,分别运行在8080和8081端口。(更改端口不会)
第二步:启动两个tomcat。
第三步:反向代理服务器的配置
upstream tomcat1 {
server 192.168.25.148:8080;
}
server {
listen 80;
server_name www.sina.com.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat1;
index index.html index.htm;
}
}
upstream tomcat2 {
server 192.168.25.148:8081;
}
server {
listen 80;
server_name www.sohu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat2;
index index.html index.htm;
}
}
第四步:nginx重新加载配置文件
第五步:配置域名
在hosts文件中添加域名和ip的映射关系
192.168.25.148 www.sina.com.cn
192.168.25.148 www.sohu.com
在浏览器访问不同域名,找到不同的tomcat,运行不同的服务。从而实现反向代理
负载均衡
如果同一个服务由多个服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。
upstream tomcat2 {
server 192.168.25.148:8081;(服务器1)
server 192.168.25.148:8082 weight=2;(服务器2)
}
可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1
综合:
第四天
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server作用是负载均衡和调度, Storage server作用是文件存储。
由于搭建FastDFS非常复杂,我在manager-web表现层新建了pictures文件夹,图片直接保存到这里。
富文本编辑器
KindEditor、UEditer。纯js开发,跟后台语言没有关系。
使用方法:(待定,会专门写一篇博客)
第一步:在jsp中引入KindEditor的css和js代码。
第二步:在表单中添加一个textarea控件。是一个富文本编辑器的载体。类似数据源。
第三步:初始化富文本编辑器。使用官方提供的方法初始化。
第四步:取富文本编辑器的内容。
表单提交之前,把富文本编辑器的内容同步到textarea控件中。
Linux配置虚拟网络命令:setup(进入一个图形化界面配置)