开源云计算技术 OpenStack
OpenStack 是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(简称IaaS)资源的通用前端。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用OpenStack前端来设置及管理自己的公共云或私有云。 OpenStack 源码在 Git@OSC 上的镜像:http://git.oschina.net/openstack OpenStack是IaaS(基础设施即服务)组件,让任何人都可以自行建立和提供云端运算服务。 from:https://www.oschina.net/p/openstack
View DetailsIIS7设置将域名不带www跳转到带www上
很多朋友在IIS环境中搭建好网站后,习惯性将带www和不带www的域名都绑定到一个网站上,这样做虽然两个域名都能访问,但容易造成权重分散,从而导致网站权重降低。 其实我们可以将访问不带www的域名自动跳转到带www的域名,例如访问taotaozaixian.com时浏览器自动跳转到www.taotaozaixian.com,浏览器地址显示的也是www.taotaozaixian.com。 总结网上的方法,有两种方法比较常用: 第一种是设置网站301重定向。优点是设置快速简单;缺点是要建立两个站点,一个真实站点,一个空站点。 第二种是安装URL重写工具。优点是只需建立一个真实站点即可;缺点是设置稍微复杂。 第一种方法可以参考此篇文章 https://www.uust.com/wiki/web/86.html 下面使用实际例子讲述第二种方法 1.首先将taotaozaixian.com www.taotaozaixian.com都解析到同一台web服务器的IP 2.下载安装web平台安装程序 https://www.microsoft.com/web/downloads/platform.aspx 或 https://www.iis.net/downloads/microsoft/url-rewrite 3.下载安装完成后在开始菜单中找到并打开 Microsoft Web Platform Installer 在打开的 Web平台安装程序 右上角输入url进行查找 选中"URL重写工具2.0",点击添加,然后点击右下角安装 安装完重新打开IIS站点,就可以看到 "URL重写" 了 4.配置重定向 打开网站https://www.ssffx.com/htaccess/?jdfwkey=5rfiq 在左侧选择"WWW域名重定向",然后在右边输入框输入带www的完整域名www.taotaozaixian.com 复制下方生成的代码
|
1 2 3 4 5 6 7 |
<Files ~ "^.(htaccess|htpasswd)$"> deny from all </Files> RewriteEngine on RewriteCond %{HTTP_HOST} ^(taotaozaixian\.com)(:80)? [NC] RewriteRule ^(.*) http://www.taotaozaixian.com/$1 [R=301,L] order deny,allow |
5.回到IIS站点,点击"URL重写",点击右边"导入规则" 将重写代码粘贴到规则里,点击应用 6.重启IIS站点,在浏览器输入不带www的域名taotaozaixian.com,浏览器就会自动跳转到www.taotaozaixian.com了 from:https://www.cnblogs.com/fjping0606/p/9879101.html
View DetailsIIS7.0设置404错误页,返回500状态码
一般在II6下,设置自定义404错误页时,只需要在错误页中选择自定义的页面,做自己的404页面即可。但是在IIS7.0及以上时,设置完404错误页后,会发现状态码返回的是500,并且可能会引起页面乱码。查找资料,发现好多资料写的不够详细,不能完美解决问题。特将我的经验分享一下,希望能帮助到大家。 经过试验,发现有两种方案可用,各有利弊,我使用的是第二种方案。 方案1: 1. 在IIS中,找到对应站点,打开“功能视图”-“IIS栏”-“错误页”; 2. 双击“404”,打开“编辑自定义错误页”对话框; 3. 选中“在此网站上执行URL”,输入自定义404错误页的URL(注意:此处URL是相对于网站根目录的相对路径,不能使用绝对路径),点击“确定”进行保存; 4. 选中“404”,点击右侧栏中的“编辑功能设置”,打开“编辑自定义错误页”对话框; 5. 在“错误响应”框中,选中“自定义错误页”,点击“确定”进行保存; 6. 重启IIS。 优缺点:此种方法优点是设置方便,不需要改动代码,只需要修改参数即可;但缺点是按照此种方法设置之后,服务器404错误时,会直接将自定义页面给返回给客户端,因此状态代码会返回200,不利于搜索引擎SEO优化; 方案2: 1. 打开 C:\Windows\System32\inetsrv\config\ 路径下的 applicationHost.config 文件(该文件是设置IIS参数的); 2. 搜索找到“<httpErrors>” 选项,将该选项的 allowAbsolutePathsWhenDelegated设置为”true”; 3. 在IIS中,找到对应站点,打开“功能视图”-“IIS栏”-“错误页”; 4. 双击“404”,打开“编辑自定义错误页”对话框; 5. 选中“将静态文件中的内容插入错误响应中”,选择或输入自定义404错误页的绝对路径(注意:此处路径是使用绝对路径,一定不能使用相对路径,否则会找不到页面),点击“确定”进行保存; 6. 选中“404”,点击右侧栏中的“编辑功能设置”,打开“编辑自定义错误页”对话框; 7. 在“错误响应”框中,选中“自定义错误页”,点击“确定”进行保存; 8. 重启IIS。 优点:设置之后,返回的状态代码依旧是404,不影响搜索引擎SEO优化; 注意:如果不设置1、2步骤,直接从第3步设置,设置完成之后,返回的状态码为500,且会显示乱码。 from:https://www.cnblogs.com/xuyangblog/p/4843854.html
View DetailsPHP 注释规范
注释在写代码的过程中非常重要,好的注释能让你的代码读起来更轻松,在写代码的时候一定要注意注释的规范。 php里面常见的几种注释方式: 1.文件头的注释,介绍文件名,功能以及作者版本号等信息
|
1 2 3 4 5 6 7 |
/** *文件名简单介绍 * *文件功能。 * @author alvin 作者 * @version 1.0 版本号 */ |
2.函数的注释,函数作用,参数介绍及返回类型
|
1 2 3 4 5 6 7 8 9 |
/** * 函数的含义说明 * * @access public * @param mixed $arg1 参数一的说明 * @param mixed $arg2 参数二的说明 * @param mixed $mixed 这是一个混合类型 * @return array 返回类型 */ |
3.类的注释,类名及介绍
|
1 2 3 4 5 6 7 |
/** * 类的介绍 * * 类的详细介绍(可选。)。 * @author alvin 作者 * @version 1.0 版本号 */ |
4.多行注释
|
1 2 |
/* php注释语法 这是多行注释。*/ |
5.单行注释
|
1 |
$n = 10; //数量n,这是单行注释 |
from:https://www.cnblogs.com/l5580/p/6065604.html
View DetailsWordPress怎么设置文章置顶
首先需要进入wordpress后台,wordpress默认后台地址http://你的域名/wp-login.php 进入后台之后,鼠标移至左侧菜单栏"文章",点击"所有文章",如下图所示。 鼠标移动到需要置顶文章的标题上,点击"快速编辑",如果你还没有发布文章,请先点击文章上方的"写文章",如下图所示。 在快速编辑中,勾选右侧的"置顶这篇文章"前的框框,如下图所示。 当然别忘了点击【更新】,不然置顶是不会生效的。 文章标题后显示"置顶"二字,说明文章置顶成功,如下图所示。 进入网站前台刷新页面,发现文章置顶生效,如下图所示。 from:https://jingyan.baidu.com/article/851fbc37ba3d2b3e1f15ab08.html
View DetailsRust语言
Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。 Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。 Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。 Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。 Rust已经连续三年(2016,2017,2018)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。 from:https://baike.baidu.com/item/Rust%E8%AF%AD%E8%A8%80/9502634?fromtitle=Rust&fromid=12624017&fr=aladdin
View DetailsClustrixDB-高级架构概述
ClustrixDB是一种集群式RDBMS,可确保事务处理符合ACID特性,同时可轻松的提供可扩展性和容错能力。 ClustrixDB集群由三个或更多节点(联网的同构服务器)组成。 ClustrixDB使用无共享架构。集群中的每个节点可以执行任何读取或写入操作。如果要扩充数据库容量,只需添加更多节点即可。 ClustrixDB的主要组件有助于实现性能和规模: 1)全局事务管理器(GTM),协调给定事务的处理。 2)Rebalancer,它在集群中自动分配数据。 3) Sierra数据库引擎,确定最佳查询执行计划,然后在分布式数据节点上执行该计划。 下图显示了ClustrixDB如何处理典型的查询。 全局事务管理器 通常通过横跨集群上分布式连接的负载均衡器,选择集群中的一个节点作为全局事务管理器(GTM)来开始处理ClustrixDB中的查询。然后在返回结果给调用者之前,GTM通过控制执行查询的每个一步、确认每一步成功完成、收集和确定执行结果等来全面管理事务。 ClustrixDB将查询编译为可执行查询片段,GTM将其分发到适当的节点以供执行。当中间结果可用时,它们将返回给GTM。一旦所有查询片段都已成功执行,GTM就完成结果并将它们返回给客户端,应用程序或用户。 Rebalancer 如果ClustrixDB的数据以前未在整个集群中分布,则不可能进行分布式处理。为了实现这一点,ClustrixDB使用了由其Rebalancer管理的专利数据分配方法。Rebalancer在集群中编排数据,以确保读取和写入始终平衡。它还保证在整个集群中维护数据的多个副本(副本)以确保容错。如果节点由于意外故障而丢失,则不会丢失任何数据。Rebalancer将自动确保创建和维护冗余副本。它还通过在添加新节点时将数据重新平衡到新节点并且在数据库保持在线的同时将数据从标记为要移除的节点移开而适应集群集大小的改变。 Rebalancer使用一致的散列算法将每个表行分配给该表的给定“切片”,并提供所有切片到每个节点的映射。这允许ClustrixDB快速轻松地确定相关数据的位置。Rebalancer在后台连续运行,不会影响正在进行的数据处理。 虽然数据被切片并分发到集群的许多节点,但是数据库表将始终作为应用程序的单个逻辑单元出现。Clustrix使用简单的SQL接口,并且不需要特殊的应用程序编程来访问分布在整个ClustrixDB集群中的数据。 如果ClustrixDB的数据以前未在整个集群中分布,则不可能进行分布式处理。为了实现这一点,ClustrixDB使用由其Rebalancer管理的专利数据分配方法。Rebalancer在集群中安排数据,以确保读取和写入始终平衡。它还保证在整个集群中维护数据的多个副本(副本)以确保容错。如果节点由于意外故障而丢失,则不会丢失任何数据。重新平衡器将自动确保创建和维护冗余副本。它还通过在添加新节点时将数据重新平衡到新节点并且在数据库保持在线的同时将数据从标记为要移除的节点移开而适应群集的改变大小。 Rebalancer使用一致的散列算法将每个表行分配给该表的给定“切片”,并提供所有切片到每个节点的映射。这允许ClustrixDB快速轻松地确定相关数据的位置。再平衡器在后台连续运行,不会影响正在进行的生产加工。 下面这张图片展示了Rebalancer如何横跨各个节点的的’切片’和表复制。请注意表的复制是如何分散在整个集群中的,以确保容错。在不同节点上的每个表切片至少是按时及复制的。 您可以看到在节点故障的情况下如何保护数据。如果节点故障,ClustrixDB将立即开始使用来自其他节点的故障节点数据的副本。然后Rebalancer立即开始通过将新副本复制到不同的节点上来重新定位该数据节点。 欲知详情请移步ClustrixDB’s Rebalancer。 Sierra数据库引擎 Sierra是处理查询计划和执行的ClustrixDB的SQL引擎。它专门设计用于在分布式、无共享(shared nothing)环境中工作,同时尽可能高效地访问分布式数据。Sierra数据库引擎由两部分组成: 1)Sierra Parallel Planner 确定SQL语句的最佳执行计划。 2)Sierra分布式执行引擎 根据计划执行查询片段,并提供中间结果。 Sierra Parallel Planner是一种基于成本的优化器,它使用概率统计,数据量,索引和查询运算符的开销来确定最有效的查询计划。 ClustrixDB Planner 的一个关键区别功能是它确定此计划,同时考虑数据在集群中的分布。 有关演示此查询分段如何工作的其他示例,请参阅ClustrixDB Sierra Database Engine. Sierra分布式执行引擎 一旦Sierra Planner确定了查询的最佳计划,它就被编译成机器可执行的查询片段。然后,这些编译的查询片段在集群中的不同节点上执行,提供了效率和增加的执行并发性。一旦每个节点上的执行完成,结果就返回到GTM节点,GTM节点然后组合部分结果并将最终结果集返回给用户。 ClustrixDB如何能够独特地利用其分布式执行以实现更快的结果的一个示例是分布式聚合处理。除了首先对每个节点的分布式数据上的数据计算部分聚合(SUM,MAX,MIN,AVG等)之外,计算类似于其它查询被分段和分布。中间结果然后由GTM合并以产生最终结果。 最后再让我们来看下在ClustrixDB中的分布查询。 结论 ClustrixDB使用自动数据分发,复杂的查询计划器和分布式执行模型,以在符合ACID的RDBMS中提供可扩展性和并发性。为了实现这一点,ClustrixDB使用了许多与其他大规模并行处理(MPP)数据库使用的相同的技术:它使用Paxos进行分布式事务解析,并使用多版本并发控制(MVCC)来防止事务冲突。借助上述主要组件,ClustrixDB为这种分布式执行提供了一个简单的SQL接口,同时还提供了可扩展性,效率和容错能力。 from:https://blog.csdn.net/luoduyu/article/details/53997249
View Details常用gulp配置文件
package.josn
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
{ "name": "g-ex", "version": "1.0.0", "description": "a gulp template", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "autoprefixer": "^7.1.4", "babel-core": "^6.26.0", "babel-preset-env": "^1.6.0", "gulp": "^3.9.1", "gulp-babel": "^7.0.0", "gulp-clean-css": "^3.9.0", "gulp-concat": "^2.6.1", "gulp-connect": "^5.0.0", "gulp-less": "^3.3.2", "gulp-postcss": "^7.0.0", "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^2.6.1", "gulp-uglify": "^3.0.0", "http-proxy-middleware": "^0.17.4", "uglify-es": "^3.1.3" }, "dependencies": { "gulp-file-include": "^1.2.0" } } |
gulpfile.js
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
var gulp = require('gulp'); var connect = require('gulp-connect'); var babel = require('gulp-babel'); var sourcemaps = require('gulp-sourcemaps'); var rename = require('gulp-rename'); var uglify = require('gulp-uglify'); var less = require('gulp-less'); var cleanCss = require('gulp-clean-css'); var autoprefixer = require('autoprefixer'); var postCss = require('gulp-postcss'); var proxy = require('http-proxy-middleware'); var fileinclude = require('gulp-file-include'); // 起服务 gulp.task('connect', function() { connect.server({ root: 'dist', livereload: true, port: 8888, middleware: function(connect, opt) { return [ // proxy('/printbox', { // target: 'http://172.20.8.30:8891', // changeOrigin:true // }), // proxy('/user', { // target: 'http://192.168.0.168:8099/user',//代理的目标地址 // changeOrigin:true,// // pathRewrite:{//路径重写规则 // '^/user':'' // } // }), ] } }); }); // html文件 gulp.task('html', function() { gulp.src('./*.html') .pipe(fileinclude({ prefix: '@@',//变量前缀 @@include basepath: './inc',//引用文件路径 indent:true//保留文件的缩进 })) .pipe(connect.reload()) .pipe(gulp.dest('./dist')); }); // css文件 gulp.task('less', ['html'], function() { gulp.src('./css/*.css') .pipe(connect.reload()) .pipe(gulp.dest('./dist/css')); gulp.src('./css/images/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/css/images')); }); // gulp.task('less', ['html'], function() { // gulp.src('./src/css/*.less') // .pipe(less()) // .pipe(postCss([autoprefixer({browsers: ['last 2 versions']})])) // .pipe(gulp.dest('./dist/css')) // .pipe(cleanCss()) // .pipe(rename({extname: '.min.css'})) // .pipe(connect.reload()) // .pipe(gulp.dest('./dist/css/min')) // }); // js文件 gulp.task('js', function() { gulp.src('./js/*.js') .pipe(connect.reload()) .pipe(gulp.dest('./dist/js')); }); // gulp.task('js',['html'] , function () { // gulp.src('./src/js/*.js') // .pipe(sourcemaps.init()) // .pipe(babel({ // presets: ['env'] // })) // .pipe(gulp.dest('./dist/js')) // .pipe(uglify()) // .pipe(rename({extname: '.min.js'})) // .pipe(sourcemaps.write()) // .pipe(connect.reload()) // .pipe(gulp.dest('./dist/js/min')) // }); // 图片 gulp.task('img', function () { gulp.src('./images/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images')); gulp.src('./images/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/')); gulp.src('./images/banners/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/banners')); gulp.src('./images/blog-post/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/blog-post')); gulp.src('./images/payments/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/payments')); gulp.src('./images/products/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/products')); gulp.src('./images/sliders/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/sliders')); gulp.src('./images/testimonials/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/images/testimonials')); }); // fonts gulp.task('font', function(){ gulp.src('./fonts/*.*') .pipe(connect.reload()) .pipe(gulp.dest('./dist/fonts')); }); // 监控 gulp.task('watch', function() { gulp.watch(['./*.html','./inc/*.html'], ['html']); gulp.watch(['./js/*.js'], ['js']); gulp.watch(['./css/*.css'], ['less']); }); // 默认任务 gulp.task('default', ['connect', 'watch', 'js', 'less', 'img', 'font']); |
from:https://www.cnblogs.com/changzhenan/p/8329864.html
View Details整理一些学习Spring Boot/Spring Cloud资料
Spring Boot 系列文章:http://www.ityouknow.com/spring-boot.html Spring Cloud 系列文章:http://www.ityouknow.com/spring-cloud.html Spring Cloud 从入门到精通:https://blog.csdn.net/valada/article/details/80892573
View DetailsSpringCloud五大核心组件
Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。 服务发现——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring Cloud Config Eureka 2eur.png 一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。 Ribbon Ribbon,主要提供客户侧的软件负载均衡算法。 3ri.png Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权响应时间负载均衡 区域感知轮询负载均衡 随机负载均衡 Ribbon中还包括以下功能: 易于与服务发现组件(比如Netflix的Eureka)集成 使用Archaius完成运行时配置 使用JMX暴露运维指标,使用Servo发布 多种可插拔的序列化选择 异步和批处理操作(即将推出) 自动SLA框架(即将推出) 系统管理/指标控制台(即将推出) Hystrix 41h.png 断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正,应用程序可以尝试调用操作。欢迎大家一起学习研究相关技术愿意了解源码的朋友直接求求交流分享技术:2147775633 42h.png 断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。 43h.png 流程图 44h.png Zuul 51z.png 类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。 Spring Cloud Config 52z.png 这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。 更多详细源码参考来源:http://minglisoft.cn/honghu/technology.html 作者:IT小跑兵 链接:https://www.jianshu.com/p/02f3995001d0 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
View Details