首页 文章 精选 留言 我的

精选列表

搜索[项目构建],共10000篇文章
优秀的个人博客,低调大师

Avere以NAS形式构建本地对象存储

NAS加速和云存储网关厂商Averec以自己内部部署的NAS系统对象存储作为核心,拥有一条通向公有云的路径。到目前为止,Avere一直专注于加速对本地文件系统的数据访问,近来又涉足到云或者对象存储。现在,又提供了以NAS封装形式的对象存储。 这款Cloud-Core NAS(C2N)系统提供了一个NAS接口,而不是对象存储,甚至不是S3。它有三个组成部分: FXT全闪存高性能层,带有自动缓存 MX100管理节点,1U设备 CX200核心系统/存储节点,1U设备,有12个10TB热插拔的磁盘驱动器 这里至少需要1个MX100,需要2个来实现高可用性。 对象存储系统了三重复制(TR)和擦除编码(EC),以及地理分散的数据恢复。最低配置的TR需要3个CX2000节点,120TB可用容量,以及1个MX100节点。这是入门级的,Avere特别强调了一些对象存储系统是以更大规模、更昂贵、更耗费成本的1PB容量为起点的。 最低的EC配置是需要6个CX200节点,450TB可用容量,外加MX100控制器。 该系统从120TB原始容量/750TB可用容量逐渐增加到超过5PB可用容量。(可用容量是基于4+3擦除代码的,其中5/8的容量可用,因此就是120TB x 0.625=75TB。) FXT层从14TB扩展到480TB的SSD容量,最高配置的FXT5600集群。集群提供了性能扩展和高可用性。 C2N系统,上层是3个MX100,下面是8个CX200,NAS特性包括: NFSv3,SMB2,多协议支持 快照 跨内部部署(私有云)和公有云的全局命名空间 NAS和私有云/公有云之间的数据迁移 镜像 压缩 加密,密钥是在本地管理的 GUI和存储分析 有可选的FalshMove用于数据迁移,FlashMirror用于灾难恢复。 Avere表示,典型的用例就是将NAS用于保存Tier-1数据,CX200(私有对象存储)用于保存Tier-2二级数据,公有云用于保存Tire-3归档数据。 据Avere称,C2N提供了私有云设施,有一个通向公有云的明确路径。它"允许企业创建一个简单且灵活的混合云,将整个异构基础设施作为单一的、逻辑存储池进行管理。" Avere C2N系统即将供货,CX200标价为99500美元。毫无疑问,如果取得成功的话,其他型号也将陆续公布。 本文转自d1net(转载)

优秀的个人博客,低调大师

Appium自动化测试框架构建

Appium简介 Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持iOS、Android及FirefoxOS平台测试。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。 相比其他的移动自动化测试工具,Appium测试由于调用了Selenium的client库使其可以使用任意的语言,包括Python、Ruby、Node.js、Objective-C等。 Appium下载与安装 可以去官方下载也可去github下,目前最新的是0.17.6版。当然国内的网盘里也有,这样就不用fan.qiang了。下载后解压即可使用,很方便。 目前的Appium版本需.net4.5及以上支持,故要想使用Appium还需安装.net4.5.1,可以去微软下载.net4.5.1,当然网盘里也有了,呵呵。 由于Appium使用了Selenium来进行自动化测试,所以还需安装Selenium,网盘里有下载,Selenium下载地址。下载后解压,切换目录到解压目录,然后执行python setup.py install即可安装Selenium,当然如果您熟悉pip 也可以用pip install Selenium来安装。 安装、配置Android模拟器 我们打算在模拟器上使用appium进行自动化测试,故首先得下载安装android开发环境,IDE开发环境配置好以后就可以通过eclipse创建一个android手机模拟器了。 下载JDK与配置JDK 下载JDK,下载之后双击压缩包并安装,一路默认下去即可完成,jdk安装到了C:Java目录下了,其下有两个文件夹jdk1.6.0_13和jre6。 配置jdk比较简单将C:Javajdk1.6.0_13bin目录添加到系统环境变量path里,记住前加分号,之后确认即可。 怎样测试java是否配置好?cmd之后键入java -verison 下载android开发环境ADT-bundle 可以去Google下载也可以去网盘下载android的集成开发环境。下载后解压到c:android目录下就行了。 配置ADT 将解压目录下的sdk下的tools和platform-tools目录添加到系统环境变量path里,记住前加分号,之后确认即可。 怎样测试android的ADT是否配置好?进入c:androideclipse目录双击eclipse.exe,看能否正常启动、使用。 新AVD模拟器 启动eclipse,点击Eclipse软件的Windows菜单,选择其下的Android Virtual Device Manager菜单项,进入Android Virtual Device Manager其对话框后,点击左侧New按钮可新建android手机模拟器。在Create new Android Virtual Device Manager对话框的name文本框内给要创建的模拟器起个名字,例如testAVD01。在Device列表框内选择2.7 QVGA 240 X320 ldpi,在选择了Device后,target列表框自动选择了android 4.4 API Level 19{现在已安装的开发环境里只有一套API,读者可自行安装其他API,届时可任选其他API作为自己测试平台}默认即可,其他选项此时可以不做选择默认设置即可,点击对话框的OK按钮确认,即可创建Android 模拟器。 启动android模拟器 cmd之后键入 emulator @testAVD01,等待数秒之后android手机模拟器启动。 安装、配置Python 这步比较简单,下载Python后默认安装即可。配置只需把c:python27目录加到系统环境变量path后即可,记住前加分号。cmd之后键入python如果见到3个大于号即证明python安装配置成功。Appium自动化测试流程 启动android手机模拟器 cmd之后键入 emulator @testAVD01,等待数秒之后android手机模拟器启动。 另起一个cmd键入adb devices查看模拟器是否正常启动了。 启动Appium 进入appium解压目录,双击appium.exe文件,点击launch即可。 基于Appium的Python自动化测试 编写代码 from selenium import webdriver # Returns abs path relative to this file and not cwd PATH = lambda p: os.path.abspath( os.path.join(os.path.dirname(__file__), p) ) desired_caps = {} desired_caps['device'] = 'android' desired_caps['browserName'] = '' desired_caps['version'] = '4.2' desired_caps['app-package'] = 'com.android.calculator2' desired_caps['app-activity'] = '.Calculator' driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 点击计算器上的数字和运算符 el = driver.find_element_by_name("1") el.click() el = driver.find_element_by_name("5") el.click() el = driver.find_element_by_name("9") el.click() el = driver.find_element_by_name("delete") el.click() el = driver.find_element_by_name("9") el.click() el = driver.find_element_by_name("5") el.click() el = driver.find_element_by_name("+") el.click() el = driver.find_element_by_name("6") el.click() el = driver.find_element_by_name("=") el.click() driver.quit() 执行代码 另起cmd,切到python代码所在目录,执行python xxx.py即可见模拟器在被操作了。 最新内容请见作者的GitHub页:http://qaseven.github.io/

优秀的个人博客,低调大师

用Docker构建与环境无关的系统

Docker 有三个特定的功能,以帮助建立与环境无关的系统: 只读文件系统 环境变量注入 存储卷 处理卷是一个大主题,为了学习前两个功能,在本文的其余部分将改变对示例的需求。WordPress 使用一个名为MySQL 的数据库程序来存储大部分数据,所以先确保运行WordPress 的容器是只读文件系统,是一个好主意。 1 只读文件系统 使用只读文件系统产生以下两个积极效果。首先,你对容器不能更改它所包含的文件产生信心;其次,你也会进一步树立信念:容器中的攻击者无法破坏文件。为了在客户系统上使用--read-only 标志,从WordPress 镜像创建和启动一个容器: docker run -d --name wp --read-only wordpress:4 完成这些步骤后,检查容器是否正在运行。你可使用任何先前介绍的方法,也可以直接检查容器元数据。如果指定的wp 容器正在运行,以下命令将输出为真,否则为假。 docker inspect --format "{{.State.Running}}" wp docker inspect 命令将显示Docker 为该容器保留的所有元数据(一个JSON 文件)。格式选项会改变元数据。除了该容器的运行状态,本例中其会滤除元数据的所有字段。这个命令将简单地输出为错误。在这种情况下,容器没有运行。为了找出原因,检查容器中的日志: docker logs wp 输出是这样的: error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables Did you forget to --link some_mysql_container:mysql or set an external db with -e WORDPRESS_DB_HOST=hostname:port? 看起来WordPress 有一个MySQL 数据库的依赖关系。数据库是一个程序,根据检索和搜索方式存储数据。好消息是,你可以使用Docker 安装MySQL,就像安装WordPress: docker run -d --name wpdb \ -e MYSQL_ROOT_PASSWORD=ch2demo \ mysql:5 一旦启动后,会创建一个不同的WordPress 容器,并链接到这个新的数据库容器中:再检查一次,WordPress 是否正常运行: docker inspect --format "{{.State.Running}}" wp2 你可以得知WordPress 失败后重新启动。检查日志以确定原因: docker logs wp2 应该有类似以下的日志: ... Read-only file system: AH00023: Couldn't create the rewrite-map mutex (file /var/lock/apache2/rewrite-map.1) 同样是WordPress 失败后重新启动,但这次的问题是,它试图写一个锁定文件到特定的位置。这是启动的必要组成部分,并无特殊。在这个示例中,需要为只读文件系统增加异常处理。你需要使用卷来做这个异常处理。使用下面的命令启动WordPress,不会有任何问题:更新版本后你能用的脚本看上去像是这样: SQL_CID=$(docker create -e MYSQL_ROOT_PASSWORD=ch2demo mysql:5) docker start $SQL_CID MAILER_CID=$(docker create dockerinaction/ch2_mailer) docker start $MAILER_CID WP_CID=$(docker create --link $SQL_CID:mysql -p 80 \ -v /run/lock/apache2/ -v /run/apache2/ \ --read-only wordpress:4) docker start $WP_CID AGENT_CID=$(docker create --link $WP_CID:insideweb \ --link $MAILER_CID:insidemailer \ dockerinaction/ch2_agent) docker start $AGENT_CID 恭喜你,现在你应该有了一个正在运行的WordPress 容器!通过使用只读文件系统,以及链接WordPress 到另一个运行着数据库的容器,可以确保运行WordPress 镜像的容器永远不会改变。这意味着,如果运行客户的WordPress 博客程序的机器出了问题,可轻松在其他地方启动该容器的另一个副本。但是这一设计有两个问题。首先,数据库和WordPress 的容器运行在同一个机器上。其次,WordPress 对重要的设置,如数据库名称、管理用户、管理密码、数据库加盐等使用默认值。为了解决这个问题,你可以创建多个版本的WordPress 软件,每一个客户都有一个特殊的配置。这样做会使简单的配置脚本变成一个在创建镜像时写入文件的怪物。通过使用环境变量来注入配置则是一个更好的方式。 2 环境变量的注入 环境变量是通过其执行上下文提供给程序的键值对。它可以让你在改变一个程序的配置时,无须修改任何文件或更改用于启动该程序的命令。Docker 使用环境变量来传达相关信息,包括容器的守护选项、容器的主机名,以及其他在容器中运行程序的实用信息。Docker 还为用户提供了一个机制,可将环境变量注入到一个新的容器。那些期望通过环境变量获取重要信息的程序,可在容器创建时就进行配置。幸运的是,WordPress 就是这样一个程序。 在深入WordPress 的细节之前,尝试注入和观察你的环境变量。UNIX 命令env 显示当前执行上下文(终端)中的所有环境变量。要查看注入的环境变量,请使用以下命令: --env 标志或-e 缩写,可用于注入任何环境变量。如果变量已经由镜像或Docker 设置,则该值将被覆盖。容器内部运行程序的方式,可以依赖于这种变量。WordPress 遵循以下环境变量: WORDPRESS_DB_HOST WORDPRESS_DB_USER WORDPRESS_DB_PASSWORD WORDPRESS_DB_NAME WORDPRESS_AUTH_KEY WORDPRESS_SECURE_AUTH_KEY WORDPRESS_LOGGED_IN_KEY WORDPRESS_NONCE_KEY WORDPRESS_AUTH_SALT WORDPRESS_SECURE_AUTH_SALT WORDPRESS_LOGGED_IN_SALT WORDPRESS_NONCE_SALT 提示 这个示例忽略了KEY 和SALT 变量,但任何实际的生产系统绝对应该设置这些值。 开始之前,你应该解决数据库和WordPress 容器在同一个机器上运行的问题。不是使用链接来满足WordPress 的数据库依赖,而是注入WORDPRESS_DB_HOST 变量的值: docker create --env WORDPRESS_DB_HOST=<my database hostname> wordpress:4 这个示例会创建(并不启动)WordPress 容器。不管你在中指定的是什么,该容器都会试着连上一个MySQL 数据库。由于远程数据库可能不会使用任何默认的用户名和密码,你就必须同时注入这些设置。假设数据库管理员是养猫爱好者且痛恨强密码: docker create \ --env WORDPRESS_DB_HOST=<my database hostname> \ --env WORDPRESS_DB_USER=site_admin \ --env WORDPRESS_DB_PASSWORD=MeowMix42 \ wordpress:4 使用环境变量注入这一方法,能帮助你区分WordPress 容器和MySQL 容器之间的物理联系。由于数据库和客户的WordPress 网站都在同一台机器上,你仍然需要解决前面提到的第二个问题——所有的网站都使用相同的默认数据库名称。你需要为每一个独立的站点设置数据库名称以环境变量的方式注入:你已经解决了这些问题,现在可以修改配置脚本了。首先,设置机器只能运行一个MySQL 容器: DB_CID=$(docker run -d -e MYSQL_ROOT_PASSWORD=ch2demo mysql:5) MAILER_CID=$(docker run -d dockerinaction/ch2_mailer) 那么网站配置脚本将是这样的:这个新脚本将为每一位客户启动WordPress 实例和监控器,并将这些容器以及一个单独的邮件程序和MySQL 数据库彼此连接。WordPress 容器在被销毁、重新启动、升级的同时,完全不用担心数据会丢失。如图所示就是这种架构。每个WordPress 和监控器容器使用相同的数据库和邮件服务 客户对当前交付的所有工作成果很满意。但有一件事可能会比较烦人。在早期的测试中,你发现监视器在该网站不可用时,的确可以准确通知邮件服务器,但重新启动该网站和监控器需要手动实现。要是系统在检测到故障时,能尝试自动恢复就更好了。Docker 对此提供了重启的策略,但仍不够稳定。 本文选自《Docker实战》。 想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。

优秀的个人博客,低调大师

nginx+tomcat+memcached构建session共享集群

一、安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html tomcat的下载地址:http://tomcat.apache.org/ c1.xsllqs.com(192.168.1.114)下载安装jdk(建议加载到本地在传上去)和tomcat [root@c1~]#wgethttp://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm [root@c1~]#wgethttp://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz [root@c1~]#ls apache-tomcat-8.0.36.tar.gzjdk-8u73-linux-x64.rpm [root@c1~]#yuminstalljdk-8u73-linux-x64.rpm [root@c1~]#vim/etc/profile.d/java.sh exportJAVA_HOME=/usr/java/latest exportPATH=$JAVA_HOME/bin:$PATH [root@c1~]#./etc/profile.d/java.sh [root@c1~]#java-version javaversion"1.8.0_73" [root@c1~]#tarxfapache-tomcat-8.0.36.tar.gz-C/usr/local [root@c1~]#cd/usr/local/ [root@c1local]#ln-svapache-tomcat-8.0.36tomcat "tomcat"->"apache-tomcat-8.0.36" [root@c1tomcat]#vim/etc/profile.d/tomcat.sh exportCATALINA_HOME=/usr/local/tomcat exportPATH=$CATALINA_HOME/bin:$PATH [root@c1tomcat]#./etc/profile.d/tomcat.sh c2.xsllqs.com(192.168.1.113)下载安装jdk和tomcat [root@c2~]#wgethttp://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm [root@c2~]#wgethttp://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz [root@c2~]#ls apache-tomcat-8.0.36.tar.gzjdk-8u73-linux-x64.rpm [root@c2~]#yuminstalljdk-8u73-linux-x64.rpm [root@c2~]#vim/etc/profile.d/java.sh exportJAVA_HOME=/usr/java/latest exportPATH=$JAVA_HOME/bin:$PATH [root@c2~]#./etc/profile.d/java.sh [root@c2~]#java-version javaversion"1.8.0_73" [root@c2~]#tarxfapache-tomcat-8.0.36.tar.gz-C/usr/local [root@c2~]#cd/usr/local/ [root@c2local]#ln-svapache-tomcat-8.0.36tomcat "tomcat"->"apache-tomcat-8.0.36" [root@c2tomcat]#vim/etc/profile.d/tomcat.sh exportCATALINA_HOME=/usr/local/tomcat exportPATH=$CATALINA_HOME/bin:$PATH [root@c2tomcat]#./etc/profile.d/tomcat.sh 二、修改tomcat配置文件 [root@c1tomcat]#cd/usr/local/tomcat/webapps/ [root@c1webapps]#mkdirmyapp/{lib,classes,WEB-INF,META-INF}-pv [root@c1webapps]#cdmyapp/ 添加c1和c2的主页文件 [root@c1myapp]#vimindix.jsp <%@pagelanguage="java"%> <html> <head><title>Tomcat1</title></head> <body> <h1><fontcolor="red">c1.xsllqs.com</font></h1> <tablealign="centre"border="1"> <tr> <td>SessionID</td> <%session.setAttribute("xsllqs.com","xsllqs.com");%> <td><%=session.getId()%></td> </tr> <tr> <td>Createdon</td> <td><%=session.getCreationTime()%></td> </tr> </table> </body> </html> [root@c2myapp]#vimindix.jsp <%@pagelanguage="java"%> <html> <head><title>Tomcat2</title></head> <body> <h1><fontcolor="blue">c2.xsllqs.com</font></h1> <tablealign="centre"border="1"> <tr> <td>SessionID</td> <%session.setAttribute("xsllqs.com","xsllqs.com");%> <td><%=session.getId()%></td> </tr> <tr> <td>Createdon</td> <td><%=session.getCreationTime()%></td> </tr> </table> </body> </html> 修改tomcat-user.xml(c1和c2都要改) [root@c1conf]#vim/usr/local/tomcat/conf/tomcat-users.xml #在</tomcat-users>中添加 <rolerolename="manager-gui"/> <rolerolename="admin-gui"/> <userusername="tomcat"password="<tomcat>"roles="manager-gui,admin-gui"/> 修改server.xml(c1和c2都要改) [root@c1conf]#vim/usr/local/tomcat/conf/server.xml #修改主配置文件,appBase后面是应用的相对路径也可以是绝对路径 <Hostname="localhost"appBase="webapps" unpackWARs="true"autoDeploy="true"> #这里是访问日志的设置 <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log"suffix=".txt" pattern="%h%l%u%t&quot;%r&quot;%s%b"/> #这里设置Context调用msm需要的组件,m1为主c2为备,因为我这里只有3台机器所以把c2作为备,正常情况是4台,2台memcached和2台tomcat <Contextpath="/myapp"docBase="/usr/local/tomcat/webapps/myapp"reloadable="true"> <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="m1:192.168.1.107:11211,c2:192.168.1.113:11211" failoverNodes="m1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> </Context> 测试配置文件 [root@c1~]#catalina.shconfigtest [root@c2~]#catalina.shconfigtest [root@c1~]#catalina.shstart [root@c2~]#catalina.shstart 三、安装msm c1和c2上下载msm需要的jar包 [root@c1~]#wgethttp://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/1.9.4/memcached-session-manager-1.9.4.jar [root@c1~]#wgethttp://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/1.9.4/memcached-session-manager-tc8-1.9.4.jar [root@c1~]#wgethttp://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/1.9.4/msm-javolution-serializer-1.9.4.jar [root@c1~]#wgethttp://repo1.maven.org/maven2/net/spy/spymemcached/2.11.1/spymemcached-2.11.1.jar [root@c1~]#wgethttp://www.java2s.com/Code/JarDownload/javolution/javolution-5.4.3.1.jar.zip [root@c1~]#mvjavolution-5.4.3.1.jarmemcached-session-manager-1.9.4.jarmemcached-session-manager-tc8-1.9.4.jarmsm-javolution-serializer-1.9.4.jarspymemcached-2.11.1.jar/usr/local/tomcat/lib/ m1和c2上安装memcached [root@m1~]#yuminstallmemcached [root@c2~]#yuminstallmemcached m1上安装nginx修改nginx的配置文件 [root@m1~]#yuminstallnginx [root@m1~]#vim/etc/nginx/nginx.conf #server外加入 upstreamtcsrvs{ server192.168.1.114:8080; server192.168.1.113:8080; } #server内加入 location~*\.(jsp|do)${ proxy_passhttp://tcsrvs; } [root@m1~]#nginx-t 启动服务 [root@m1~]#systemctlstartnginx.service [root@m1~]#systemctlstartmemcached [root@c2~]#systemctlstartmemcached 四、测试

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册