Spring ROO快速构建Web项目

2017年9月12日 Java, Spring, Web开发, 工具 No comments

一、概述

Spring Roo是基于Java语言快速创建应用的强大开源工具,它来源于SpringSource,能够快速创建和管理基于Spring的Web应用,其目的是提高Java开发人员的生产效率。Spring Roo使用Spring、Java Persistence API(Java 持久层API)、Hibernate、AspectJ、Spring Security、Spring Web Flow、Log4J 和 Maven等成熟可靠的库,快速声场数据库、连接池、模板、logging等组件的配置文件,当然还有POJO的CRUD代码。

利用Spring Roo可以敏捷开发Web项目,但项目不会依赖与Spring  Roo。通常情况下,我们可以利用Spring Roo快速构建MVC工程,自动生成代码,然后导入到STS/Eclipse/IntelliJ等IDE中继续开发,然后根据实际的业务逻辑和个人编码习惯进行改造,当需要增加模型、Service层、Controller层时,执行一行Roo命令就可以快速完成需求。

二、快速构建

2.1 安装配置

系统环境:默认已安装好Jdk1.8和Maven 3.3。

去官网下载安装包:https://projects.spring.io/spring-roo/#running-from-shell

解压,然后将bin路径加入到系统变量Path中,比如C:\spring-roo-2.0.0.RC1\bin,然后在CMD中执行roo命令即可进入Spring Roo的命令行模式,如下:

另外,在Eclipse或STS中安装Roo插件即可集成到IDE中,依次进入Eclipse->Help->Install new Software-Add , 添加如下安装源:Roo – http://dist.spring[……]

Read more

WSO2 API Manager调研学习总结

2017年9月8日 Java, Web开发 2 comments ,

近期要做一个SOA服务治理相关的项目,详细调研了下WSO2的API Manager(简称,APIM)。因为在调研过程中发现,国内研究WSO2的开发者较少,社区中也不是很活跃,可供直接上手的中文文档很少,好在官网提供的用户文档比较详细,认真研读研读,调研推进起来还不算太费劲,不过源码比较庞大,大致了解下框架。本文梳理下所调研的APIM相关知识,希望能给后来的开发学习者提供一点帮助。

一、概述

当企业实现自己的SOA框架时,需要对外以APIs的方式暴露内部系统的一些关键的流程、数据和服务。外部系统可以集成这些开放的APIs构建新的业务的解决方案,这种模式可以以一种去中心化的开发模式快速扩展潜在市场,挖掘潜在客户,带来巨大的经济效益,这就是所谓的“APIs经济”。但以一种协同的方式发挥API的杠杆作用面临着一些挑战:控制管理、可信连接、安全认证等。

WSO2 API Manager是一款可以旨在提供优秀的API管理功能的开源产品,能够实现API的创建、发布、生命周期管理、流量控制、版本控制、治理和安全控制等功能。 已用于WSO2 Enterprise Service Bus、WSO2 Identity Server和WSO2 Governance Registry等产品中。WSO2 API Manager可以为开发团队提供Web页面进行部署、管理和监控API,服务消费者可以进行服务发现、服务订阅以及服务调用。APIM的Key Manager组件默认通信协议是Apache Thrift,另外,APIM可以通过集成WSO2 Analytic平台实现API调用监控及告警。

二、安装部署

2.1 基本配置

单点部署方式:

默认Linux环境:Jdk1.8、关闭防火墙,关闭环境中运行Rabbitmq服务,检查端口是否存在冲突
查看5672端口占用

# nets[……]

Read more

Openstack虚拟机备份

2017年9月8日 Ceph, Openstack, Shell, 云计算 No comments , ,

一、概述

采用Ceph分布式文件系统作为Openstack后端存储已经成为一种主流的存储对接方案,Nova、Glance、Cinder都将Ceph rbd作为默认存储。虚拟机、云硬盘及其快照的备份都可以根据rbd特性进行快捷的备份操作,实践中根据实际的情况制定适合的备份策略。备份策略的制定可考虑以下因素:

  • 备份目标;
  • 备份数据的保有量;
  • 备份频率

制定好备份策略后,据此配置好备份脚本及程序,定时备份生产环境中虚拟机等重要数据的备份。

二、备份操作

2.1 全量备份

(1)直接导出虚拟机镜像的方式

虚拟机、云硬盘及其快照的备份时全部类似,都无需关机,直接从Ceph统一存储rbd上导出相关镜像即可。

这种方式适用于虚拟机当前状态的制作镜像并备份,非常方便,不会在Openstack平台和Ceph系统上留下痕迹,适合跨云的镜像快速迁移。

恢复虚拟机只能通过Openstack镜像上传,然后在Openstack中创建虚拟机的方式进行间接恢复。

(2)利用rbd导出的方式

先给当前虚拟机创建快照并导出全量数据。

例如这里导出一个虚拟机的快照数据到本地,:

这种方式是从Ceph存储端做备份,先给当前虚拟机rbd存储打个快照,然后全量导出。

这种方式的恢复也完全在Ceph侧操作,通过rbd import方式恢复即可。

rbd import会创建一个新的镜像,并从指定的文件中导入数据,当前前提是vms/fa8db954-46c7-40bd-80b5-02[……]

Read more

从云硬盘(卷)中创建虚拟机

2017年9月7日 Openstack, 云计算 No comments

1 系统分区引导方式

当启动Openstack虚拟机时,系统分区创建方式有以下五种:

  • 从虚拟机镜像引导:需要用户从Glance镜像库中指定一个镜像,并将其拷贝到临时磁盘;
  • 从虚拟机快照引导:需要用户指定一个虚拟机快照,并将其拷贝临时磁盘来系统分区;
  • 从Volume卷引导:需要用户来指定Cinder 卷,直接挂载为虚拟机系统分区,无需拷贝,因为卷是可引导磁盘,操作系统所需文件已经保存;
  • 从虚拟机镜像引导并挂载新建的Volume卷:需要用户从Glance镜像库中指定一个镜像,镜像内容会被拷贝到一个新创建的Cinder卷中,随后将其挂载为虚拟机的系统盘;
  • 从Volume卷快照引导并挂载新建的Volume卷:需要用户指定Cinder卷的快照,快照将被拷贝到一个新创建的Cinder卷中,随后将其挂载为虚拟机的系统盘。

后面三种与Volume卷相关的三种引导方式,通常系统分区的声明周期通常都比虚拟机的生命周期还要长,因为虚拟机停止时,卷没有被删除。与前两种方式对比,从卷中引导虚拟机系统具有更快的配置和启动速度。Nova存储后端配置为本地文件存储的话,性能方面要弱很多,因为不支持虚拟机的在线迁移,如果存储后端对接共享存储集群(NFS、Ceph等)可以支持虚拟机的在线迁移,因为虚拟机系统分区可以从多次存储节点上并发访问。

2 从卷中创建虚拟机

在通常情况下,从虚拟机镜像或虚拟机快照中创建虚拟机已经足够了,但有些时候我们想要持久化存储的系统盘时而临时盘时,从卷中启动虚拟机将变的非常有用,另外从卷中启动还有以下优点:

  • 可以不受云主机类型中磁盘配额的限制(甚至可以指定一个零磁盘的类型)
  • 持久化的卷生命周期比虚拟机实例的声明周期还要长
  • 可以从卷中直接创建镜像,无论卷是否已经挂载到虚拟机上

3 实践

3.1 创建可启动的卷

[……]

Read more

操作系统原理学习总结之进程管理(三)

2017年8月20日 操作系统 No comments

内容主要摘录自《操作系统与设计原理》中文版第二部分:进程,详细内容请参考原文。

1 进程描述和控制

1.1 定义

进程定义:包含程序代码和代码相关联的数据集的两个基本元素所组成的实体,如果处理器开始执行这个程序代码,称这个执行实体为进程。

也有以下的几个定义:

  • 正在执行的程序;
  • 正在计算机上执行的程序示例;
  • 能分配给处理器并由处理器执行的实体;
  • 一组指令序列执行、一个当前状态和相关的系统资源集。

进程的组成元素包括:

  • 标识符;
  • 状态;
  • 程序计数器;
  • 上下文数据;
  • I/O状态信息;
  • 记账信息;

这些信息存放在进程控制块中,可以说进程是由程序代码和相关数据的进程控制块组成。

1.2 进程状态

  • 两状态进程模型

一个进程处于运行和未运行状态。操作系统利用某种方式跟踪进程,创建未运行状态的新进程时,未运行的进程保存在某种类型的队列中,并等待他们的执行时机,当前运行的进程不断被中断,操作系统中的分派器选择一个新进程运行,前一个进程从运行态转换到未运行态,另一个进程转换到运行态。

 

  • 五状态进程模型

对“两状态模型”进行改进,无论哪种进程行为模型,进程生存期总围绕进程的创建和终止,首先增加新建和终止这两个状态,其次,考虑到单个进程队列和分派器不适合处于阻塞状态进程的选择,将非运行状态拆分成就绪态和阻塞态。

进程创建场景:新的批处理作业、交互登录、操作系统提供一项新的服务、现有进程派生新进程。

进程终止场景:正常完成、超时、无可用内存、内存越界、错误访问受保护的资源、算术错误、I/O失败、无效指令、特权指令、数据误用、管理员或操作系统干涉、父进程终止、父进程请求终止子进程……

非运行状态拆分成就绪态和阻塞态:在两状态模型的单[……]

Read more

操作系统原理学习总结之目录(一)

2017年8月20日 操作系统 No comments

操作系统原理的学习对每个程序员的内功修炼具有重要的意义。听过许多老师及前辈说操作系统是多么多么重要,当时也觉得不明觉厉,后来看过很多牛人博客,字里行间也透露出新系统架构设计也能从操作系统的设计原理中找到启发和映射,工作中接触过一些软件系统,渐渐觉得操作系统作为一门核心CS课程的份量,上学时没有深入学习,现在决心好好学习下操作系统,借助手上几本经典书籍的目录列了个简单的学习提纲,然后准备按主题进行整理总结,希望能够淬炼个人的技能修养,文章内容不当之处恳请各位指正。

一、操作系统概述

1.1 操作系统发展概述

二、进程管理

2.1 进程描述和控制

2.2 进程和线程

2.3 对称多处理SMP

2.4 并发性:互斥和同步

2.5 并发:死锁和饥饿

内容链接:http://zjzone.cc/index.php/2017/08/20/cao-zuo-xi-tong-yuan-li-jin-cheng-guan-li/

三、内存管理

3.1 内存管理

3.2 虚拟内存

四、调度

4.1  单处理器调度

4.2 多处理器调度

4.3 实时调度

五、I/O管理

5.1 I/O 管理

5.2 磁盘调度

六、文件管理

6.1 文件管理

七、系统安全

7.1 安全威胁

7.2 安全技术

八、分布式系统

9.1 分布式处理

9.2 集群

九、参考

《操作系统精髓与设计原理》

《 Operating System Concepts [9 ed.]》

《Linux/UNIX系统编程手册》

《深入理解计算机系统》

《计算机体系结构 量化研究方法》

Operating system: CS162(Berkeley 公开课)

《Linux 内核设计的艺术(第2版)》

《UNIX环境高级编程》

&nbs[……]

Read more

两个简单的Python自动登录脚本

2017年8月8日 Python 1 comment

1 简介

自动登录脚本在一些需要频繁登录场景中非常有用,之前上学的时候用过中国联通wifi自动重连的一个脚本(Github传送门),感觉非常好用,点赞!

这里的简单登录脚本主要通过Python调用Selenium WebDriver的API进行实现,对于验证码自动识别这里主要借助前不久开放的百度AI的文字识别功能。

  • Selenium 是Thoughtworks推出的一个web自动化测试框架,WebDriver可以驱动Firefox、Chrome、IE、Edge、Safari等多种浏览器,Selenium通过 WebDriver驱动与浏览器进行交互。
  • 百度AI之文字识别:支持多场景下的文字检测识别,中英混合识别,整体识别准确率高达90%以上。详细请访问百度OCR的官方介绍

环境准备:

安装Selenium:

下载webdriver驱动:

Chrome:
https://sites.google.com/a/chromium.org/chromedriver/downloads

Edge:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

Firefox:
https://github.com/mozilla/geckodriver/releases

IE:
https://npm.taobao.org/mirrors/selenium/3.4/

百度AI  OCR SDK下载安装:

http://ai.baidu.com/sdk#sdk-category-ocr
[crayon-5bf47a71659cb93[……]

Read more

虚拟机监控简单脚本

2017年8月7日 Openstack, Python, Shell, 云计算, 集群管理 No comments , ,

1 简介

上周线上的一台运行CAS的虚拟机磁盘满了,导致统一身份认证系统发生故障,问题虽小,但影响范围比较大,教训是深刻的。越发感觉云平台后期运维是多么的重要,建设与之配套的自动化运维平台的对在线业务的实时监控、智能告警具有重要的意义。

2 脚本

由于运维平台尚未建立,这里临时提供一个简单脚本,实现获取Linux虚拟机的CPU、Mem、磁盘等使用量统计。

首先准备一个虚拟机IP列表的hosts文件,这里是从个人数据库中拉取虚拟机IPs,也可以写个简单的Python脚本从Nova的数据库中拉取:get_vm_ips.py

执行下,获取虚拟机浮动IP

生成的hosts.txt内容如下:

设置当前节点到所有VM的SSH。

然后利用SSH远程执行iostat、free和df命令获取CPU、Mem、磁盘等使用率信息,设定磁盘使用率阈值(比如60%),超出阈值进行告警,一个在终端下运行的简单的脚本如下:

效果如下:

此外,为了方便浏览,这里将当前监控结果临时保存,并更新到apache服务器的默认页面中,这里增加了<br>、<font>等格式化输出,通过IP直接可以简单浏览监控信息,脚本如下monitor_vm_infos.sh:

然后起一个定时任务,自定义监控频率,[……]

Read more

Openstack运维指南文档整理

2017年7月31日 Openstack, 云计算 1 comment

本文主要译自David Stilson所著的《OpenStack Operations Guide》,目前Openstack社区官网中已经找不到该文档了,估计是内容需要更新,但其中的体系结构和运维方法的介绍十分全面,非常值得初学者学习与参考的,本文仅为个人学习Openstack过程中的内容摘录,详细内容请阅读原文,翻译不当之处在所难免,恳请各位指正。

一、体系结构

1 体系结构示例

nova-network网络架构

 

当前OpenStack网络结构

早期的开发实现

最大程度的提高网络连接的性能(引入bond双网卡绑定)

节点图

  • 控制节点

  • 计算节点

  • 网络节点

  • 存储节点

2 云控制及云管理设计

硬件选择

服务分离

数据库

消息队列

Conductor服务

API

扩展

调度

镜像

安全认证

网络注意事项

3 计算节点

计算节点通常比存储节点需要更多的内存和CPU资源。

三种常见存储

  • 存储不在计算节点上-采用共享文件系统
    • 优点:一旦计算节点出现故障,虚拟机通常很容易恢复;专门存储系统维护简单;盘数可伸缩;额外存储可另作他用。
    • 缺点:高I/O虚拟机实例可能会影响其他无关虚拟机实例;网络的使用会降低性能。
    • 适用于当可靠性和扩展性要求较高的云环境。
  • 存储在计算节点上-采用共享文件系统
    • 优点:当需要额外存储时能够扩展到外部存储
    • 缺点:引入共享文件系统会丢失本地数据的优势;多节点上的虚拟机恢复变得复杂;计算节点机箱大小会限制上面硬盘的数目;网络的使用会降低性能。
    • 适用于部署在现有的规格不大可能改变的服务器上。
  • [……]

Read more

Tomcat使用相关问题汇总

2017年7月31日 Web开发, 工具 No comments

1 用户配置管理

Tomcat7配置用户管理

重启,浏览器登录admin:admin。

2 字符编码修改

修改默认字符编码为UTF-8

3 以Daemon方式启动

配置JDK(略),然后编译安装daemon工具,生成jsvc,就可以执行daemon run/start/stop/等命令了。

4 主机名ping不同造成启动失败

启动时,出现主机未知的错误,如下:

检查环境,修改hosts文件,可以ping通主机名即可正常启动……

(待续……)