2019独角兽企业重金招聘Python工程师标准>>>
后台服务程序框架技术选型方案
1.硬件环境
公司服务器
2.软件环境
2.1 操作系统
CentOS 7
2.2 反向代理/web服务器
Nginx
2.3 应用服务器
tomcat
2.4 数据库
mysql or oracle
- mysql
- oracle 现在公司系统中都有用到不做过多介绍。
2.5 缓存
Redis(Codis) or Memcached
- Redis 现在公司系统有用到 不做过多解释
- Memcached 类似Redis的分布式缓存服务、只是没有Redis丰富的数据类型支撑。
建议使用:Redis
推荐理由:公司一直在使用、同事熟练程度高。
2.6 消息队列
MetaQ or kafka
- MetaQ 淘宝网开源的消息中间件使用java写的类似kafka。
- kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据
建议使用:kafka
推荐理由:虽然MetaQ我一直在使用并没有问题、但是由于作者基本不更新社区活跃程度低。反而Kafka社区活跃、各大网站有成熟的解决方案、提供可参考的应用实例多。
3.工程构建和管理工具
- Maven 开发人员已经很熟悉了。此处略
- Jenkins Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
- 开发工具 Eclipse
一个简单的持续集成架构图如下: 如上持续集成可以实现开发、测试、生产自动化部署管控。方便调试。
4.前端技术
略
5.后端技术
- Spring MVC
- MyBatis
- Spring
- Dubbox
- 模板语言
- 配置文件统一管理
- 日志组件
- JSON库包
- DataSource数据源
5.1 Spring MVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。
推荐使用理由:公司项目中一直在使用并且也是时下流行的技术框架。
熟练程度:熟练使用。
5.2 MyBatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。 2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
推荐使用理由:简单易用的配置可以直接通过SQL解决复杂的业务场景。学习成本不算高、替代hibernate。
熟练程度:熟练使用。
5.3. Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说, Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
推荐使用理由:公司项目中一直在使用并且也是时下流行的技术框架。
熟练程度:熟练
5.4. Dubbox
Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架。 作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensions)。
推荐使用理由:可以解决系统与系统之间复杂调用、可以实现面向服务SOA编程。简单实现系统服务化发布与治理。
熟练程度:熟练使用dubbo服务发布和服务治理。如果可能可以快速将单一系统重构为分布式服务架构系统。
5.5. 模板语言
-
freemarker:
- FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
-
Velocity:
- Velocity是一个基于java的模板引擎(templateengine)。它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的对象。
-
Beetl:
- Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。 而且还易学易用。
beetl功能与Freemarker功能比较: http://javamonkey.iteye.com/blog/1573346
velocity freemarker比较: http://lishumingwm163-com.iteye.com/blog/933365
推荐使用理由:FreeMarker在公司系统中已经广泛使用、但是个人深深被beetl简单易用所吸引因此推荐使用。
熟练程度:熟练使用(因为类似FreeMarker、文档丰富、学习成本低)
5.6. 配置文件统一管理
- commons-configuration:
- Commons Configuration是一个java应用程序的配置管理类库。可以从properties或者xml文件中加载软件的配置信息,用来构建支撑软件运 行的基础环境。 在一些配置文件较多较的复杂的情况下,使用该配置工具比较可以简化配置文件的解析和管理。也提高了开发效率和软件的可维护性。
- disconf:
- Distributed Configuration Management Platform(分布式配置管理平台).专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。
推荐使用理由:如果长期考虑建议使用 disconf 。开发、测试、生产运维实现界面配置、后期扩展性高。如果单独一个子系统使用Commons Configuration足矣。
熟练程度:可以快速搭建disconf服务器并应用到项目中。
5.7. 日志组件
logback 和 slf4j 配合使用
推荐使用理由:公司项目中一直在使用并且也是时下流行的技术框架。
熟练程度:熟练使用。并可以结合logback搭建系统错误邮件报警提醒。
5.8. JSON库包
建议使用 FastJson。参考网址:https://github.com/alibaba/fastjson
推荐使用理由: 零依赖、性能高、强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)。业内广泛使用。
熟练程度:熟练使用
5.9. JDBC连接池、监控组件 Druid
建议使用 druid 为监控而生的数据库连接池。参考网址:https://github.com/alibaba/druid
推荐使用理由:druid为监控而生、DruidDataSource 高效可管理的数据库连接池。替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池
熟练程度:熟练使用。
6.系统数据访问流程
如下图概括系统数据访问流程: