一, 整体概述
1.1, 共性问题
技术瓶颈, 不成体系, 不能实际使用, 不能落地, 无法入门
1.2, 目标 - 软件架构
专注于构建: 高可扩展, 高性能, 大数据量, 高并发, 分布式的系统架构.
各项技术, 组合构建分布式的, 高可扩展的系统架构, 为高性能, 大数据量, 高并发的处理和性能优化做好准备.
软件架构和软件设计关注的是不同层面的体系
1.3, 内容概述
1, 构建基本的业务功能模块
(基于 maven+Git+spring mvc+spring+mybatis+ehcache+MySQL+X-gen 代码生成), 前端页面 jQuery+CSS+html
基本业务: 用户管理, 商品管理, 购物车, 订单管理, 库存管理
2, 高扩展性的分布式体系架构 (基于 nginx+Varnish+Memcache+ActiveMQ)
3,Nosql 的合理使用和架构优化 (基于 MongoDB)
4, 分布式文件存储和架构优化 (基于 MogileFS)
说明
1,maven,springmvc,spring,x-gen 等
2,mybatis,ehcache,MySQL 等
3,Git,nginx,Varnish,Memcache,ActiveMQ,MongoDB,MogileFS 等
1.4, 具体内容
1, 准备
Maven: 分模块, 分工程, 多模块, 多 web 应用, 合并成一个 war 包
Git: 入门 egit, 冲突解决
2, 不关注业务, 技术整合
大数据量, 高并发下, 并发读, 并发写, 并发混合读写性能等
3, 架构应用的技术, 安装配置
nginx: 各个模块的配置使用, 反向代理, 负载均衡, 动静分离, Rewrite, 配置优化和使用建议等
Varnish:VCL 基础和进阶, 负载均衡, 缓存管理, 日志, 监控分析并优化 Varnish 等
Memcache: 缓存读写, 分布式缓存, 一致性 hash 算法, 虚拟节点, 命中率的提升, 缓存管理与监控, 理解 Memcache 的数据存储方式, 最佳实践等
ActiveMQ:JMS 编程, 基于 ActiveMQ 的并发, ActiveMQ 的集群, 管理监控, 消息传递, 持久化, ActiveMQ 高级特性, 与 tomcat 集成, 与 spring 集成, 性能优化
MongoDB:CURD 操作, 索引, 集合, 聚合框架, 副本集, 分片, 应用管理, 运行监控, 管理, 备份, Java 操作 MongoDB, 与 Spring 集成, 最佳实践等
MogileFS: 配置和使用, 理解 MogileFS,Java 客户端的应用开发, 文件存储, 管理监控
4, 整体发布和部署分布式部署
整理代码, 整合 war 包, 发布服务
配置 nginx 和 varnish, 配置 mogilefs, 全局搭建
二, maven 补充
详细参看: maven 系列博客
2.1, 分模块, 分工程管理
architecture1web: 最后合并用的 war
common: 公共包
customermgr: 用户或客户管理 webapp
goodsmgr: 商品管理
goodsmgrweb: 商品管理
2.2, 多模块, 多 Web 应用, 合并成一个 war 包
1, 在总的 Web 的 pom 里面, 加入要合并的 war 内容, 如下: 在 build 下 plugins
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>3.2.2</version>
- <configuration>
- <overlays>
- <overlay>
- <artifactId>customermgr</artifactId>
- <groupId>com.GitHub.bjlhx15.architecture</groupId>
- </overlay>
- <overlay>
- <artifactId>goodsmgrweb</artifactId>
- <groupId>com.GitHub.bjlhx15.architecture</groupId>
- </overlay>
- </overlays>
- </configuration>
- </plugin>
2, 同时依赖也要对应添加, 注意依赖包的 type
- <dependencies>
- <dependency>
- <artifactId>customermgr</artifactId>
- <groupId>com.GitHub.bjlhx15.architecture</groupId>
- <version>1.0-SNAPSHOT</version>
- <type>war</type>
- </dependency>
- <dependency>
- <artifactId>goodsmgrweb</artifactId>
- <groupId>com.GitHub.bjlhx15.architecture</groupId>
- <version>1.0-SNAPSHOT</version>
- <type>war</type>
- </dependency>
- </dependencies>
- View Code
3, 创建基础项目并且合并后整理, 参看分支: dev01-splitbase
如果多个 war 有相同路径且同名的文件, 如果总的 Web 里面有, 那么总的这个文件会覆盖分支的; 如果总的没有, 那么看 plugin 的合并顺序, 留下第一个的文件
4, 在每个要测试的 Web 的 pom 里面, 加入 Web 容器
jetty 配置
- <plugin>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-maven-plugin</artifactId>
- <version>9.4.5.v20170502</version>
- <configuration>
- <scanIntervalSeconds>10</scanIntervalSeconds>
- <stopPort>9999</stopPort>
- <httpConnector>
- <port>8081</port>
- </httpConnector>
- <webAppConfig>
- <contextPath>/goods</contextPath>
- </webAppConfig>
- </configuration>
- </plugin>
三, Git 补充
详细参看: Git 系列博客 https://www.cnblogs.com/bjlhx/category/993475.html
3.1, 补充技术点
Git 的版本号都是生成的一个 hash 值
Windows 上工具 Git 和 TortoiseGit
推荐直接使用 idea 上 Git 默认插件即可, eclipse 上 egit;
Git server, 可以选择使用 GitHub, 码云等
3.2, 其他
Fetch 和 Pull 区别: Fetch: 从远程获取最新到本地, 不自动 merge;Pull=Fetch+merge
Revert 和 reset:
Reset: 回滚到指定版本号, 会将当前 head 内容重置, 不留痕迹 [soft: 留树和索引; Mixed: 留树, 不要索引, hard, 都不要 (一般已经重置了就都不要了)] ;
Revert: 撤销某次提交, 这次撤销也会作为一次 commit 提交保存
反倒是
来源: http://www.bubuko.com/infodetail-3069727.html