浅谈搜狐云景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就能看到一个非常easy的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: 500ms
success: [200,201,403,301,302]
try_restart:
enable: true
fall: 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,FILE log4j.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%n log4j.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
哈。是不是非常easy呢。
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平台实践之路
前言: 搜狐云景作为搜狐的paas平台,在2014年5月22日的云计算大会上正式发布了公测.初测,注册用户必须先申请邀请码参与公测会赠送用户100元电子券,经过实名认证之后会再赠送100电子券,目测可 ...
- 体验搜狐PaaS平台搜狐云景-自动调度(Autoscale)
今天,收到一封「搜狐云景」送邀请码的邮件,价值 200 rmb,立马前往官网简单了解一下,这个玩意儿是搜狐公司云战略的一个产品,一个 PaaS 平台,简单了解了一下特性: 1.自由定制运行环境,这表示 ...
- Python伪开发者对于搜狐云景的测评
Python伪开发者对于搜狐云景的测评 本人是GAE和OpenShift的狂热爱好者,玩过各种国外PaaS.某次想搞个稍微复杂点的Python Web程序,需要比较好的网络传输速度,就试图找前PM(P ...
- 搜狐云景client工具评測之WordPress的搭建
搜狐云景是搜狐推出的一款PaaS产品,眼下还处在公測阶段,拿到邀请码后试用了一下,感觉还不错. 搜狐云景提供了四种方式部署应用,感觉应该能够满足各种口味的码农:1. zip包的形式在网页上传并部署 ...
- SAE、搜狐云景和百度云之初见
近期有需求将我们的应用部署到公有云的服务平台上,于是找了几家公有云服务做了一下调研, 首先对比一下他们提供的功能: 功能 SAE 搜狐云景 百度云 版本控制工具 svn GIT,和百度云的比起来,用 ...
- 终极套娃 2.0|云原生 PaaS 平台的可观测性实践分享
某个周一上午,小涛像往常一样泡上一杯热咖啡 ️,准备打开项目协同开始新一天的工作,突然隔壁的小文喊道:"快看,用户支持群里炸锅了 -" 用户 A:"Git 服务有点问题, ...
- 灵雀云容器PaaS平台助力知名股份制银行金融科技革新
互联网.科技和金融的碰撞给银行业带来巨大影响.IT技术起初是传统金融提升效率的工具和方法,随着新技术的演进,技术成为驱动变革的核心要素.Fintech金融科技以技术和数据为驱动,用创新的方法改变了金融 ...
- 云原生PaaS平台通过插件整合SkyWalking,实现APM即插即用
一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 APM,专为云原 ...
- 《浅谈产品》——加油APP的平台是如何做的
最近油价又上涨了,我们平常去加油站加油用到"某滴加油"."某团加油"这些APP,一般情况下加200的油,各种优惠下来,最终只需要付170左右就可以了,基本是优惠 ...
随机推荐
- git add -A (用该命令添加文件时报错)
前言 最近在学着不使用github客户端,而直接用git命令上传代码至github,当使用命令 git add -A 添加所有项目文件时报错 老实说我是蒙蔽的,因为从来没有遇到过这个错,确认输入 ...
- Java.HttpClient绕过Https证书解决方案二
方案2 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.security.Secur ...
- Dotnet Core2.1 使用CodeFirst
一.添加Mysql引用 二.添加连接字符串 三.配置startup.cs 三.初始化数据库 Add-Migration init Update-Database 四.数据迁移 user实体添加了pas ...
- (转)vuex2.0 基本使用(3) --- getter
有的组件中获取到 store 中的state, 需要对进行加工才能使用,computed 属性中就需要写操作函数,如果有多个组件中都需要进行这个操作,那么在各个组件中都写相同的函数,那就非常麻烦,这 ...
- 国外AI界牛人主页 及资源链接
感觉 好博客要收集,还是贴在自己空间里难忘!!! 原文链接:http://blog.csdn.net/hitwengqi/article/details/7907366 http://people.c ...
- 【技术累积】【点】【java】【19】访问权限
java中的四种访问权限 范围如下表 权限 类内 同包 不同包子类 不同包非子类 Public ✔️ ✔️ ✔️ ✔️ 默认(Default) ✔️ ✔️ ️ Protected ✔️ ✔️ ✔️ P ...
- 微信jssdk图片上传
一.html页面如下: <div class="weui-cell"> <div class="weui-cell__hd"></ ...
- 通过Git向Github提交代码(Windows系统)
1.新建项目 在GitHub选择并创建一个项目.首先,登录 GitHub,单击页面右上角加号“+” ,选择“New repository” 选项. 填写项目名称及描述,默认项目为“Public”,如果 ...
- openstack--memecache
一.缓存系统 静态web页面: 1.工作流程: 在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Reques ...
- 移动APP 微信支付完整过程(wxPay 方案一)
apicloud.weixinpay官方提供了两种方案. 本模块封装了两套支付方案: 方案一:开发者通过 getOrderId.payOrder 自己处理签名过程(微信开放平台建议把 getOrder ...