浅谈搜狐云景PAAS平台
前言:
搜狐云景作为搜狐的paas平台,在2014年5月22日的云计算大会上正式发布了公测。初测,注册用户必须先申请邀请码参与公测会赠送用户100元电子券,经过实名认证之后会再赠送100电子券,目测可以对试用用户基本app够跑半年。
除了用户中心的一些基本安全信息设置和各种账单外,我想主要对其控制台的使用进行研究一番。
废话不多说,在绑定邮箱并充值10元成正式用户之后,无阻挡进行各种测试吧。
dashboard很清新干净,是一个对用户基本消费情况和使用资源服务的基本概览。
---------------------------------------------------
一、来创建个应用
这里需要选择选择应用的基本类型是web或后台worker;
运行环境需要事先选择好,其java就提供三种不同的运行环境,支持语言类型也挺多的,基本的主流语言都有支持到了;
实例类型也就是容器类型,使用linux lxc技术,提供了六种不同的容器来运行我们的程序。
创建成功之后,会有一些默认的配置。
域名:cstest.sohuapps.com
版本:1
实例配置:3-8,可以自定义配置
容器类型:C2,可以自定义配置
黏性会话:关闭,可以自定义配置
外网访问:关闭,可以自定义配置
git服务:git@git.cloudscape.sohu.com:cs/cstest.git,据了解后续会开启git push自动部署功能。
自动调度:开启,可以自定义规则引擎,这个比较牛逼,目测国内paas还没有支持到这点的。</span>
笔者发现,
如果我们没有上传程序包,它会根据我们创建应用选择的运行环境提供一个默认的程序包放到应用的版本1中。
启动之后,访问域名 http://cstest.sohuapps.com 就能看到一个很简单的hello world!
--------------------------------------------------
二、详解代码包
经过比较深入的了解,代码包结构首先无论哪种语言都只能是zip包的结构,解开之后的标准目录如下:
不难发现,有这样几个文件或者目录:
app.yaml |
文件, 承载整个app运行的核心配置文件 |
app |
项目运行的核心代码目录 页面代码目录,对于Java,是WEB-INF所在的目录; 对于PHP, 是PHP页面所在目录。 |
conf |
个性化配置目录; 包括,nginx server段自定义配置、nginx server段自定义配置、自定义host配置等 |
bin | 用户自定义脚本目 |
然后,我要重点剖析一下这个app.yaml文件,它的配置有无、是否正确、具体参数设置直接决定app的 运行状况和监控状态。
对于搜狐云景paas上提供的八种运行环境,它们的app.yaml配置都是不一样的,甚至 于python与python on webpy的app.yaml配置都是不一样的。
下面我对于云景提供的六种语言,八类环境的配置进行详细介绍,并为每个运行环境提供一个可运行的模板程序包,为大家提供参考。
2.0 全部参数
首先贴上一张提供的所有参数配置,但并不是每个运行的语言都能使用。
2.1 Java on jetty
appid: 666666666
start: $JETTY_START
tcp_health: false
tcp_health_port: [8001, 8002]
try_restart: {fall: 10, enable: true}
web_health: true
web_health_conf:path: /success: [200, 201, 403, 301, 302]timeout: 500ms
2.2 Java on resin
appid: 666666666
start: $RESIN_START
tcp_health: false
tcp_health_port: [8001, 8002]
try_restart: {fall: 10, enable: true}
web_health: true
web_health_conf:path: /success: [200, 201, 403, 301, 302]timeout: 500ms
2.3 Java on tomcat
appid: 666666666
start: $TOMCAT_START
tcp_health: false
tcp_health_port: [8001, 8002]
try_restart: {fall: 10, enable: true}
web_health: true
web_health_conf:path: /success: [200, 201, 403, 301, 302]timeout: 500ms
2.4 PHP
appid: 666666666
start: $PHP_FPM_START
2.5 LUA
appid: 666666666
start: $LUA_START
2.6 NODEJS
appid: 666666666
web_health: true
web_health_conf: path: /timeout: 500mssuccess: [200,201,403,301,302]
try_restart: enable: truefall: 10
start: $NODEJS $USER_DIR/app/main.js
2.7 PYTHON
appid: 666666666
start: $UWSGI_START
2.8 PYTHON with WEBPY
appid: 666666666
start: $PYTHON $USER_DIR/bin/main.py 8080
try_restart: {fall: 10, enable: true}
web_health: true
web_health_conf:path: /success: [200, 201, 403, 301, 302]timeout: 500ms
2.9 RUBY ON RAILS
appid: 666666666
web_health: true
start: /opt/apps/ruby/bin/unicorn_rails -c /opt/src/app/unicorn.rb -D
stop: kill $(cat /opt/conf/unicorn.pid)
总结一下,
三、高级进阶
提供语言支持太多,不能面面俱到,下面以java为例,介绍一下搜狐云景提供的一些高级功能。
3.1 日志输出
log4j.rootCategory=INFO,FILElog4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}]%-5p %c(line\:%L) %x-%m%nlog4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.Threshold = INFO
log4j.appender.FILE.File=${LOG_FILE}
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[%d{yyyy-MM-dd HH\:mm\:ss}]%-5p %c(line\:%L) %x-%m%n
哈,是不是很简单呢。
Logger log = LoggerFactory.getLogger(LogTest.class);log.info("info| " + Thread.currentThread().getName() + " is running!");
log.warn("warn| there is some warning messages");
log.debug("debug| I am doing system debug");
log.error("error| sorry ,some errors happend!");
log.trace("trace| unknown messages following!");
3.2 服务使用
//(a)、获取redis服务列表
static List<RedisInstanceNode> getNodes(String uid, String password) throws ServiceException {Map<String, String> params = ParamUtils.getDefaultParams();params.put("uid", uid);params.put("password", password);String endpoint = "http://internal.cloudscape.sohu.com";String action = "/redis/service_instance/nodes";String url = endpoint + action;int timeout = HttpUtils.getRestTimeout();if (httpService == null) {httpService = new HttpServiceImpl();}HttpService.HttpResult result = httpService.httpGet(url, params, timeout); String info = result.getResult();Map<String, JsonNode> res = JsonUtils.readValueAsJson(info);JsonNode nodesJson = res.get(ApiKeys._nodes);if (nodesJson == null || nodesJson.isNull()) {log.info("open api return error message, appinfos is empty , code: " + result.getCode() + ", message: "+ res.get(ApiKeys._message));return Collections.emptyList();}List<RedisInstanceNode> list = (List<RedisInstanceNode>) JsonUtils.readValueAsList(JsonUtils.writeValueAsString(nodesJson), ArrayList.class, RedisInstanceNode.class);return list;}
//<span style="font-family: Arial, Helvetica, sans-serif;">(b)、</span><span style="font-family: Arial, Helvetica, sans-serif;">根据返回的实例nodes列表构建redis 连接池,笔者使用了强大的jedis。</span>
private static ShardedJedisPool pool;
for (RedisInstanceNode redis : nodes) {String ip = redis.getIp();int port = redis.getPort();int master = redis.getIsMaster();JedisShardInfo jsi;if (master == 1) {jsi = new JedisShardInfo(ip, port, "master");jsi.setPassword(key);jsi.setTimeout(3600000);shards.add(jsi);} else {continue;}}JedisPoolConfig jpc = new JedisPoolConfig();jpc.setMaxActive(500);// 最大活动实例数目jpc.setMaxIdle(200);// 最大停止实例数目jpc.setMaxWait(5000);// 最大等待时间jpc.setTestOnBorrow(false);pool = new ShardedJedisPool(jpc, shards);
//(c)、使用连接池,进行数据set与get
try {jedis = pool.getResource();jedis.setex("test-key", defaultTimeout, "test-value");} catch (Exception ex) {log.error(ex.getMessage(), ex);if (jedis != null) {pool.returnBrokenResource(jedis);}} finally {if (jedis != null) {pool.returnResource(jedis);}}
好了,这样就能使用redis服务了,其余的几类服务类似吧。
3.3 ssh登录
可以看到可以为每个实例单独的开启SSH管理功能,这就相当于是个VPS拉,前提是要上传了公钥之后才能使用这么强大的功能。
不过,别失望,很多命令是不能使用的哦,看来是对命令进行了精简呢。不过这已经是很强大了,进去能看到我们的自己的日志了和进程等信息。
- 1、很抱歉,ssh的管理功能不能每个实例都能打开,最多只能起两个,好在可以关闭,自己能自由切换。
- 2、然后,其停止和卸载app的地方隐藏的很深啊,类似于github上的要delete一个项目一样,要深层隐藏,可能为了确保用户不误操作吧。
- 3、配置app.yaml比较麻烦,有个模板对应改是好点的。
- 4、服务开放的虽然基本的够用,但是还是少了点,像很多cdn呐,mongodb啊,存储类的服务都没有,期待很快开放。
email:pautcher@gmail.com
微博:http://weibo.com/pautcher
浅谈搜狐云景PAAS平台相关推荐
- 体验搜狐PaaS平台搜狐云景-自动调度(Autoscale)
今天,收到一封「搜狐云景」送邀请码的邮件,价值 200 rmb,立马前往官网简单了解一下,这个玩意儿是搜狐公司云战略的一个产品,一个 PaaS 平台,简单了解了一下特性: 1.自由定制运行环境,这表示 ...
- Python伪开发者对于搜狐云景的测评
本人是GAE和OpenShift的狂热爱好者,玩过各种国外PaaS.某次想搞个稍微复杂点的Python Web程序,需要比较好的网络传输速度,就试图找前PM(Project Manager)要个国内的 ...
- Python 伪开发者对于搜狐云景的测评
本人是GAE和OpenShift的狂热爱好者,玩过各种国外PaaS.某次想搞个稍微复杂点的Python Web程序,需要比较好的网络传输速度,就试图找前PM(Project Manager)要个国内的 ...
- 基于搜狐云景的java语言开发技巧
基于搜狐云景的java语言开发技巧 坊间盛传国内最牛X的paas公测了,上网搜了下,是搜狐云景,我试用了下,以下是我对搜狐云景的初体验,和辛苦耕耘的码农分享.在云景上开发java项目,和你现在的工作没 ...
- 搜狐云景客户端工具评测之WordPress的搭建
搜狐云景是搜狐推出的一款PaaS产品,目前还处在公测阶段,拿到邀请码后试用了一下,感觉还不错. 搜狐云景提供了四种方式部署应用,感觉应该可以满足各种口味的码农:1. zip包的形式在网页上传并部署 ...
- 搜狐云景client工具评測之WordPress的搭建
搜狐云景是搜狐推出的一款PaaS产品,眼下还处在公測阶段,拿到邀请码后试用了一下,感觉还不错. 搜狐云景提供了四种方式部署应用,感觉应该能够满足各种口味的码农:1. zip包的形式在网页上传并部署 ...
- 使用搜狐云景部署Ghost博客
准备工作: Ghost源码包:点击下载(发布为止最新版本为0.5.2). git:使用git来在云景上部署Ghost. 搜狐云景账户:目前搜狐云景申请共测奖励100元代金券,实名认证再奖100. 开始 ...
- 搜狐云景openapi初探
关注paas也已经有段时间了,最近发现搜狐也出了个paas,叫云景,于是花了一天时间进去一探究竟.. paas的关注点太多了,自动调度.语言支持.监控.日志.计费等等,这都是开发者最关心的核心功能. ...
- 试了一下搜狐云景对ruby的支持
常去的论坛上有人发帖,提到搜狐正在公测的云景平台,说是支持ruby,因为国内支持这个的主机不多,就用toto先试了一下. toto是什么? 一个简单的blog系统,地址在https://github. ...
最新文章
- Thinkphp5 用ab压力测试工具测试高并发请求
- Linux(Ubuntu)设置环境变量(转载)
- LeetCode 1450. 在既定时间做作业的学生人数
- 如何学习编程?顺便介绍些好的网站
- oracle表段是什么,【DB笔试面试274】在Oracle中,什么是延迟段创建(Deferred Segment Crea......
- python如何高效办公_用 Python 高效办公|一次写好100个word通知,还有谁?
- LaTex论文编写常用代码
- 微信小程序授权登录源码
- java支付宝原理_java支付宝支付原理及其问题点
- svm神经网络葡萄酒matlab,SVM神经网络的数据分类预测--葡萄酒种类识别
- 致新浪科技频道的一封公开信
- Mac升级node版本
- turtlesim画正方形代码对比
- 魔百盒cm311-1a yst 青龙
- 2018年世界杯冠军竟然被大数据算出来了,还要比吗?
- PNP+NMOS用于充电的原理解释
- 函数最值题目及答案_关于函数的习题及答案
- Java小白入门200例79之Java类的封装
- 全国各地DNS地址详细列表
- Clickhouse 在云原生场景下的部署和使用
热门文章
- ASP.NET MVC 音乐商店 - 4. 数据访问
- 服务器维护lol3.23,LOL3月23日测试服更新公告 3月23日更新内容介绍
- java基础之 IO流
- 数据预处理:标称型特征的编码和缺失值处理
- c语言和Python整除符号,互联网常识:python除法运算符有哪些
- 服务器默认管理口登录信息(默认IP、用户名、密码)大全
- 单片机作业 可乐浇汁 “苦乐交织”
- 职场各“族”都能成功
- MATLAB糖葫芦哈哈哈
- 遇到问题–python–pytest: error: unrecognized arguments: --cov-report=html