① 目前真正意义上算是云计算的平台有哪些
Microsoft Windows Azure
Windows Azure是微软的云计算平台,其主要目标是帮助开发者开发可运行在云服务器、数据中心、Web和PC上的应用程序。开发者能使用微软全球数据中心的储存、计算能力和网络基础服务。
2. Google App Engine
Google App Engine 是Google提供的服务,允许开发者在 Google 的基础架构上运行网络应用程序。Google App Engine 应用程序易于构建和维护,并可根据访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器,开发者只需上传应用程序,它便可立即为用户提供服务。
3. VMware Cloud Foundry
Cloud Foundry是VMware的一项开源PaaS计划,使用各种开源开发框架和中介软件,来提供PaaS服务。开发者可以通过这个平台来建设自己的SaaS的服务,不用自行建设和维护硬体服务器和中介软件。由于Cloud Foundry采用开源的网站平台技术,所以开发者的应用程序也可以任意转移到其他平台上而不受限于PaaS的平台。
4. Force.com
Force.com是企业云计算公司Salesforce.com的社会化企业应用平台,允许开发者构建具有社交和移动特性的应用程序。
5. Heroku
Heroku是一种提供Ruby语言服务的云计算应用平台,为开发者进行网络编程提供全新体验。目前,除了Ruby外,该平台还支持Node.js、Clojure、Java、python和Scala等语言。
6. Amazon Elastic Beanstalk
Elastic Beanstalk为在Amazon Web Services云中部署和管理应用提供了一种方法。该平台建立如面向php的Apache HTTP Server和面向Java的Apache Tomcat这样的软件栈。开发人员保留对AWS资源的控制权,并可以部署新的应用程序版本、运行环境或回滚到以前的版本。CloudWatch提供监测指标,如CPU利用率、请求计数、平均延迟等。通过Elastic Beanstalk部署应用程序到AWS,开发人员可以使用AWS管理控制台、Git和一个类似于Eclipse的IDE。
7. Engine Yard Cloud
Engine Yard的特色是提供一个Ruby on Rails的技术栈,其中包括Web服务器、应用和数据库服务器,同时提供一个Rails优化的Linux发行版。开发者可以通过Engine Yard的仪表板来进行环境配置、应用程序部署和监控。
② 如何在php上安装phalcon
下载phalcon 把phalcon.dll 放到相关目录,一般是ext里面 在php.ini中添加 extension=phalcon.dll 重启环境
我的 php 是 5.4.20 的
php_phalcon.dll 是5.4.12.0 的
没有问题的
print_r(preg_grep('/^phalcon/i', get_declared_classes()));
Array
(
[145] => PhalconException
[146] => PhalconDbAdapter
[147] => PhalconDIInjectable
[148] => PhalconDI
[149] => PhalconFormsElement
[150] => PhalconMvcModelValidator
[151] => PhalconValidationValidator
[152] => PhalconCacheBackend
[153] => PhalconDbAdapterPdo
[154] => PhalconDbDialect
[155] => PhalconMvcModelMetaData
[156] => PhalconAnnotationsAdapter
[157] => PhalconLoggerFormatter
[158] => PhalconLoggerAdapter
[159] => PhalconFlash
[160] => PhalconMvcModelBehavior
[161] => PhalconDispatcher
[162] => PhalconMvcModelResultset
[163] => PhalconMvcViewEngine
[164] => PhalconMvcModelException
[165] => PhalconAssetsResource
[166] => PhalconConfig
[167] => PhalconSessionAdapter
[168] => PhalconAclAdapter
[169] => PhalconTranslateAdapter
[170] => PhalconDIFactoryDefault
[171] => PhalconMvcRouter
[172] => PhalconTag
[173] => PhalconAcl
[174] => PhalconDb
[175] => PhalconCacheException
[176] => PhalconCacheMultiple
[177] => PhalconCacheBackendApc
[178] => PhalconCacheBackendFile
[179] => PhalconCacheBackendMongo
[180] => PhalconCacheBackendMemory
[181] => PhalconCacheBackendMemcache
[182] => PhalconCacheFrontendOutput
[183] => PhalconCacheFrontendNone
[184] => PhalconCacheFrontendJson
[185] => PhalconCacheFrontendBase64
[186] => PhalconCacheFrontendData
[187] => PhalconTagSelect
[188] => PhalconTagException
[189] => PhalconPaginatorException
[190] => PhalconPaginatorAdapterModel
[191] =>
[192] =>
[193] => PhalconValidation
[194] => PhalconValidationMessage
[195] => PhalconValidationException
[196] => PhalconValidationMessageGroup
[197] =>
[198] =>
[199] =>
[200] =>
[201] =>
[202] =>
[203] =>
[204] =>
[205] =>
[206] => PhalconDbIndex
[207] => PhalconDbColumn
[208] => PhalconDbAdapterPdoSqlite
[209] => PhalconDbAdapterPdoMysql
[210] => PhalconDbAdapterPdoOracle
[211] => PhalconDbAdapterPdoPostgresql
[212] => PhalconDbDialectOracle
[213] => PhalconDbDialectMysql
[214] => PhalconDbDialectSqlite
[215] => PhalconDbDialectPostgresql
[216] => PhalconDbException
[217] => PhalconDbProfiler
[218] => PhalconDbProfilerItem
[219] => PhalconDbReference
[220] => PhalconDbRawValue
[221] => PhalconDbResultPdo
[222] => PhalconAclRole
[223] => PhalconAclResource
[224] => PhalconAclAdapterMemory
[225] => PhalconAclException
[226] => PhalconText
[227] => PhalconKernel
[228] => PhalconSecurity
[229] => PhalconSecurityException
[230] => PhalconVersion
[231] => PhalconSession
[232] => PhalconSessionBag
[233] => PhalconSessionException
[234] => PhalconSessionAdapterFiles
[235] => PhalconFilter
[236] => PhalconDIException
[237] => PhalconDIFactoryDefaultCLI
[238] => PhalconDIService
[239] => PhalconDIServiceBuilder
[240] => PhalconFilterException
[241] => PhalconFlashDirect
[242] => PhalconFlashSession
[243] => PhalconFlashException
[244] => PhalconCLITask
[245] => PhalconCLIRouter
[246] => PhalconCLIConsole
[247] => PhalconCLIConsoleException
[248] => PhalconCLIDispatcher
[249] => PhalconCLIDispatcherException
[250] => PhalconCLIRouterException
[251] => PhalconAnnotationsReader
[252] => PhalconAnnotationsException
[253] => PhalconAnnotationsReflection
[254] => PhalconAnnotationsAnnotation
[255] => PhalconAnnotationsCollection
[256] => PhalconAnnotationsAdapterApc
[257] =>
[258] =>
[259] => PhalconLoader
[260] => PhalconLogger
[261] => PhalconLoaderException
[262] => PhalconLoggerItem
[263] => PhalconLoggerMultiple
[264] => PhalconLoggerException
[265] => PhalconLoggerAdapterStream
[266] => PhalconLoggerAdapterFile
[267] => PhalconLoggerFormatterJson
[268] => PhalconLoggerAdapterSyslog
[269] => PhalconLoggerFormatterLine
[270] => PhalconLoggerFormatterSyslog
[271] => PhalconConfigException
[272] => PhalconConfigAdapterIni
[273] => PhalconFormsForm
[274] => PhalconFormsManager
[275] => PhalconFormsException
[276] => PhalconFormsElementFile
[277] => PhalconFormsElementText
[278] => PhalconFormsElementDate
[279] => PhalconFormsElementHidden
[280] => PhalconFormsElementNumeric
[281] => PhalconFormsElementSubmit
[282] => PhalconFormsElementCheck
[283] => PhalconFormsElementSelect
[284] => PhalconFormsElementPassword
[285] => PhalconFormsElementTextArea
[286] => PhalconCrypt
[287] => PhalconTranslate
[288] => PhalconTranslateException
[289] =>
[290] => PhalconCryptException
[291] => PhalconEscaper
[292] => PhalconEscaperException
[293] => PhalconAssetsManager
[294] => PhalconAssetsException
[295] => PhalconAssetsResourceJs [296] => PhalconAssetsCollection
[297] => PhalconAssetsResourceCss
[298] => PhalconHttpCookie
[299] => PhalconHttpRequest
[300] => PhalconHttpResponse
[301] => PhalconHttpCookieException
[302] => PhalconHttpRequestFile
[303] => PhalconHttpResponseCookies
[304] => PhalconHttpResponseHeaders
[305] => PhalconHttpRequestException
[306] => PhalconHttpResponseException
[307] => PhalconQueueBeanstalk
[308] => PhalconQueueBeanstalkJob
[309] => PhalconMvcUrl
[310] => PhalconMvcView
[311] => PhalconMvcMicro
[312] => PhalconMvcModel
[313] => PhalconMvcApplication
[314] =>
[315] => PhalconMvcCollection
[316] => PhalconMvcController
[317] => PhalconMvcCollectionManager
[318] => PhalconMvcCollectionException
[319] => PhalconMvcDispatcher
[320] => PhalconMvcDispatcherException
[321] => PhalconMvcModelQuery
[322] => PhalconMvcModelRow
[323] => PhalconMvcMicroLazyLoader
[324] => PhalconMvcMicroCollection
[325] => PhalconMvcMicroException
[326] => PhalconMvcModelMessage
[327] => PhalconMvcModelCriteria
[328] => PhalconMvcModelRelation
[329] => PhalconMvcModelManager
[330] => PhalconMvcModelTransaction
[331] => PhalconMvcModelQueryLang
[332] => PhalconMvcModelMetaDataFiles
[333] => PhalconMvcModelMetaDataApc
[334] => PhalconMvcModelQueryStatus
[335] => PhalconMvcModelQueryBuilder
[336] => PhalconMvcModelValidatorUrl
[337] => PhalconMvcModelMetaDataMemory
[338] =>
[339] =>
[340] =>
[341] => PhalconMvcModelValidatorEmail
[342] =>
[343] => PhalconMvcModelValidatorRegex
[344] =>
[345] =>
[346] =>
[347] =>
[348] =>
[349] =>
[350] =>
[351] =>
[352] =>
[353] =>
[354] =>
[355] =>
[356] =>
[357] => PhalconMvcRouterGroup
[358] => PhalconMvcRouterRoute
[359] => PhalconMvcRouterException
[360] => PhalconMvcRouterAnnotations
[361] => PhalconMvcUserPlugin
[362] => PhalconMvcUserMole
[363] => PhalconMvcUrlException
[364] => PhalconMvcUserComponent
[365] => PhalconMvcViewException
[366] => PhalconMvcViewEnginePhp
[367] => PhalconMvcViewEngineVolt
[368] =>
[369] => PhalconEventsEvent
[370] => PhalconEventsManager
[371] => PhalconEventsException)
③ PHP如何实现艾特@功能大概思路
@功能 实现分为两块:展现和消息推送
展现: 比较简单, 存储时直接存@xxxx , 显示的时候用正则把 @xxxx 匹配出来 替换成自己想要的信息就行。
消息推送, 也就是让别人知道你@他了, 这个如果量比较小,直接发消息入库就行, 如果量大就需要消息队列了,经常用的有beanstalk, memcacheq 等。
④ 现在it发展这么快,企业私人部署怎么能保证私密性呢
第一步 资产识别
1.首先识别与在PaaS上软件即服务(SaaS)应用开发相关的资产,然后为每一个资产分配一个数值。确定所有资产所属的类别。下面是一些例子:1.用户:SaaS开发人员和SaaS用户都应归于这一类别。每个用户组的数值都应当基于开发和测试应用时所用去的平均工时数。
2.资源:这是指被PaaS开发人员使用以运行和存储SaaS应用的资源。例如,Elastic Beanstalk使用了亚马逊弹性云计算(EC2)、亚马逊简单存储服务、亚马逊简单通知服务、亚马逊CloudWatch、弹性负载平衡以及自动缩放等功能。其数值应基于这些资源的所用即所付的支出。Elastic Beanstalk是免费的。
3.安全性:这就意味着加密机制、防火墙以及行业安全标准,其中包括了SecaaS(安全即服务)。其数值是基于用于实施安全措施的工时。
4.文档:培训手册、管理准则、安全标准、物理标准、应急计划、灾难恢复计划以及服务等级协议(SLA)等也只是文档中的若干示例而已。其数值是基于用于发布文档所需的媒介类型的——如打印、在线或数字媒体(CD)等。
5.软件:操作系统;漏洞测试工具;办公工具(文档、电子表格、演示文稿);日志分析工具;以及编程语言(Java、 .NET、 PHP脚本程序语言、Node.js 编程语言、Python和Ruby) 都应被视为软件。其数值应基于软件的采购价格或用于在PaaS上进行SaaS应用开发所需的所用即所付支出。
第二步 漏洞与威胁识别
黑客并不是唯一会利用PaaS漏洞的威胁来源。以下是威胁来源的其他一些示例:
软件设计缺陷可能会让恶意SQL注入。
不正确的访问控制配置可能会导致应用正在处理的存储敏感数据被盗。
不正确的防火墙配置可能导致意外的PaaS停用。
由于云计算的资源池和弹性特性而出现的数据恢复脆弱性。这意味着分配给一位用户的资源有可能会被意外地重现分配给另一位不同的用户。这样,也就无法总是保证能够为前一位用户恢复数据。
第三步 风险评估
用户希望得到保证,即PaaS将持续地保持可用性,同时他们获得更多流量资源的需求能够得到满足。对于不可用性风险的评估是一种定量的方法。一些示例包括:
PaaS在一年中由于基础设施即服务(IaaS)停用而变得不可用的估计频率
由于不正确防火墙配置而受到PaaS攻击的估计频率
不能满足SLA中承诺性能的估计频率
支持PaaS运行的IaaS的网络路由器和交换机发生不成功故障的估计频率。
第四步 应用相关保障措施修补漏洞
执行成本效益保障措施是降低在PaaS上进行SaaS应用开发风险的一种方法。下面是一些例子:
应用已被正确设计,且没有软件缺陷。PaaS开发人员和云计算架构师拥有了足够的技能和经验在PaaS上开发设计良好的应用。
用户已根据他们不同的角色和/或数据敏感度对访问控制配置进行了正确的设置。日志记录选项已被激活。
防火墙设置已被正确设置。入侵检测系统和负载平衡器均已到位。一个PaaS故障机制策略已得到增强。PaaS的输入输出流量数据已被加密。
第五步实施风险缓解策略
资产识别、漏洞与威胁识别、风险评估以及应用相关保障措施修补漏洞的具体实施过程会随着具体组织的实际情况不同而有所差异。为了对整个过程实施标准化并降低相关成本,应实施风险缓解策略。
这个策略应包括AWS资源、编程语言以及在PaaS上用于开发、运行以及存储应用的服务器(在前文所述的情况中,就是指Elastic Beanstalk),而且因重大技术变革、用户需求变更以及组织需求变更需对该策略进行周期性审查和更新。
⑤ PHP当中,怎么使用 beanstalk 来做队列如何在 TP 中简单引入呢
消息队列Beanstalk详解
先从安装开始
##Githubhttps://github.com/kr/beanstalkd
cdbeanstalkd-1.10
make或者makeCFLAGS=-O2
注意,你不需要运行configure命令哦,因为对应的makefie已经是建立好了的。make之后在当前目录下生成了beanstalkd可执行程序,你也可以makeinstall一下让它安装到/usr/local/bin中,或者你自己拷贝到一个自定义目录中即可。
./beanstalkd-hUse:./beanstalkd[OPTIONS]Options:-bDIRwaldirectory-(use-f0for"alwaysfsync")-Fneverfsync(default)-lADDRlistenonaddress(defaultis0.0.0.0)-pPORTlistenonport(defaultis11300)-uUSERbecomeuserandgroup-(defaultis65535)-sBYTESsetthesizeofeachwalfile(defaultis10485760)()-ccompactthebinlog(default)-ndonotcompactthebinlog-vshowversioninformation-Vincreaseverbosity-hshowthishelp##b设置二进制日志文件目录,Beanstalk支持把任务写入日志文件,便于恢复##l设置监听地址##p设置监听端口##v查看版本################启动不指定任何参数,表示在0.0.0.0端口11300监听./beanstalkd&./beanstalkd-l127.0.0.111301&./beanstalkd-l192.168.1.16811302&在实际中应该监控这个进程,防止意外终止退出。为了更好理解Beanstalk的原理,建议阅读官方文档:github.com/kr/beanstalkd/blob/master/doc/protocol.md,以下是我个人的学习笔记:当Put一个job时,取决于是否设置了delay,job可能进入READY或DELAYED状态,DELAYED的job超时后(或者调用kick)变成READY,reserve命令取一个最新的READY的job并把其变为RESERVED状态(这个时候是被取出执行),RESERVED状态的job可以发送delete删除,也可以使用release释放,根据是否设置delay时间,可能变成READY或DELAYED状态,也可以调用bury命令让job进入休眠,休眠中的job可以被delete也可以用kick命令让其变为READY。当reserve一个READY状态的job去执行时,如果设置的运行超时时间,则在取出时开始计时,如果超时则会从新放回到READY队列。job的运行的剩余时间可以通过stats-job命令来查看。如果要分配更多时间给job,可以发送touch命令。命令reserve取job时,这个job可能来自任一tube(当前链接的watchlist是多个时),默认,一个新链接watch一个叫default的tube。可以使用watch命令添加一个新的tube到watchlist中(如果这样,一般就不要试图使用tube的名字来区分要执行的任务,比如有两个tubeA和B,当reserve取job时,这个job可能来自A也可以来自B,不过前提是A和B都在watchlist中)。如果要取指定tube的job,明确使用use即可,这样只会获取指定tube的job。可以在消费方建立新链接后,watch某个tube以期望获取它的job(也可以使用use只获取特定tube的job)。同样道理,要put某个job都某个tub,需要先使用use命令,否则就是put到默认的叫default的tube中。reserve命令只是取状态为READY的job,如果要去其它状态的job,则需要使用peek和peek-xxxx命令(peek-readypeek-delayedpeek-buried)。job取出后根据它的状态可以做相应操作,比如deletereleaseburykick。PHP框架Phalcon中提供对Beanstalk的客户端库://Connecttothequeue$queue=newPhalconQueueBeanstalk(array('host'=>'127.0.0.1','port'=>11300));链接到Beanstalk只有两个参数,并没有验证等信息,以上指定的就是默认值。Beanstalk是支持多host的,PhalconQueueBeanstalk看来并没有实现这个。在调用put执行,应该首先调用choose()方法指定tube,否则就是使用default这个tube。(这个所谓的choose实际就是发送use命令)然后再调用put把job添加到你期望的tube中:1$qid=$queue->put("QueueMessage");注意,put成功就返回job的标识符。以下展示一个完整的例子:$queue=newPhalconQueueBeanstalk(array('host'=>'127.0.0.1','port'=>11300));$queue->choose("my_tube");for($i=0;$i<10;$i++){$qid=$queue->put("Mytube--QueueMeaage$i");echo$qid." ";}$queue->choose("default");for($i=0;$i<10;$i++){$qid=$queue->put("Defaulttube--QueueMeaage$i");echo$qid." ";}切换到消费端,首先要使用choose()来获取来自哪个tube的job(按照道理应该是调用watch()方法,但是实际测试,watch()没有起作用,只好换成choose指定特定tube),然后调用peekReady()获取一个PhalconQueueBeanstalkJob对象,当然如果失败就返回false,Job对象获取后,可以操作自然就有delete()release()bury()touch()kick()和getBody(),其中getBody()获取Job的实际内容。$queue=newPhalconQueueBeanstalk();//$queue->watch("my_tube");$queue->choose("my_tube");while(true){if(($job=$queue->peekReady())!==false){$message=$job->getBody();echo$message." ";$job->delete();}else{usleep(200000);}}PhalconQueueBeanstalk提供了Beanstalk协议的大部分内容,但是状态相关的没有实现。为了详细查看Beanstalk,可以使用一个第三方的PHP程序(github.com/ptrofimov/beanstalk_console):
⑥ 如何使用 phusion passenger
Phusion Passenger是一个流行的Web应用服务器,它最初是针对Ruby的,现在也支持Node.js应用。在今年的早些时候该功能被引入了Passenger的企业版中,但是现在已经开源并随着最近的4.0.21免费版发布。
Passenger能与Apache或者Nginx Web服务器集成,旨在成为一个服务、监控和扩展Web应用程序的完整解决方案。Phusion公司的 总部位于荷兰 ,他们宣称在Passenger中运行 Node.js 应用的好处包括:
多租户——通过最小的配置运行一些应用的能力
监控——自动启动Node.js进程、如果进程崩溃了则重启它们
扩展——根据要处理的请求的数量增加或者减少进程的数量
统计——帮助显示运行中进程的状态的工具
Passenger的作者 还指出 ,与Apache/Nginx集成还带来了其他的好处,例如:加速了静态文件服务,阻止了很多常见的攻击和慢客户端。
该公告标志着Phusion向自己宣称的让Passenger最终成为一个多语言应用服务器的目标更进了一步。去年,Passenger对 Python的支持到达了beta状态 ,并于最近完成。紧跟着发布了支持Node.js的公告,Phusion还 推出 了 Meteor (一个基于Node的应用框架)支持。
Passenger本身是用C++编写的,它没有和Ruby或者任何其他的语言紧耦合。版本4中的一些架构发生了一些变化。Passenger内部的I/O处理器现在是事件驱动的,和Node.js的工作原理相似,同时企业版支持混合多进程和多线程执行,这是为了在支持通过WebSockets进行流媒体直播这样的功能时最大化资源利用率。
Passenger还为Ruby应用提供了“带外(out of band)”执行这样的功能,用户能够利用它们做其他的事情,例如:将垃圾收集延迟到请求期间,与Phusion的 Union Station产品 (一个订阅式应用监控和分析服务)集成。
在流行的Ruby应用服务器中,Puma和Passenger相似,它们都喜欢使用线程而不是Thin和Unicom这样的服务器所使用的事件架构。Phusion团队最近发布了 一篇文章比较了Passenger和Puma ,而Puma的作者Evan Phoenix则在HackerNews上对此 做出了回应 。
InfoQ和Phusion的CTO Hongli Lai进行了一次谈话以讨论Passenger最近的更新:
Passenger 为 Ruby 用户提供了不寻常的特性,例如带外执行,它和语言运行时紧密集成。那么对于 Node.js 和 Python 用户而言有相似的功能么?
大部分功能所有支持的语言都可以使用,包括Node.js和Python。从第一天开始,我们就一直在尽量减少对Ruby的依赖。虽然我们并没有积极的推广,但是事实是在第一个版本发布几个月之后我们就已经支持Python。 我们现在还计划在下一次发布时支持 Meteor 。
Node.js和Python不能使用的功能只有很少几个,或者是因为它们对这些语言没有意义,或者是因为它们需要简单的语言特定的支持代码,而这些代码还没有被编写。Node和Python的垃圾收集器通常并不会忍受像Ruby那样的长时间的GC暂停,所以我们期望Node.js和Python用户不需要带外工作。
你认为现在的 Node.js 支持有多稳定?
我们认为它非常稳定。所有的应用程序测试都通过了,所有测试人员的应用程序都工作良好且没有已知的问题。
Passenger 最初的目标是让 Ruby 部署和 PHP 部署一样简单,仅需要用户将他们的应用丢放到正确的目录即可。你认为 Passenger 现在已经完成这一目标了么?
部署一个应用涉及到很多事情,从操作系统和语言运行时的配置到类库依赖的管理和应用程序进程的监控。PHP的部署之所以容易的原因之一是,Web服务器能够通过mod_php模块自动地处理运行的PHP应用程序。
在最初开发Passenger的时候,我们的主要计划是运行、监控和管理Ruby应用程序。你必须运行多个应用程序服务器进程,让它们监听一个本地socket,设置Web服务器反向代理这簇sockets,并且设置进程监控工具重启崩溃的进程。而在Passenger中,我们开发了一个类似于mod_php的机制解决了这些问题。因此在版本1.0中我们已经实现了自己的目标:通过将一个Ruby应用程序丢放到正确的目录运行它。
PHP生态系统依然被认为更容易部署的原因是,许多流行的PHP应用程序能自动地处理除了应用程序运行之外的其他事情。例如, Wordpress 没有依赖,不需要用户编辑配置文件或者通过漂亮的图形用户界面征求数据库凭证。但是如果你编写自己的PHP应用,那么你将会遇到和Ruby、Node或者Python应用开发人员相同的问题。
有没有托管公司真正地提供开箱即用的 Passenger 支持?
提供开箱即用的Passenger支持的知名托管公司有 Amazon Elastic Beanstalk 和Red Hat OpenShift 。许多其他的提供商(例如 Heroku )对应用程序服务器的选择往往不可知,但是它们依然允许用户很容易地使用Passenger。还有很多较小的托管公司默认使用Passenger,例如 BrightBox 和 SpeedyRails 。
在 Ruby 应用程序服务器领域有一些强有力的竞争者( Thin 、 Unicorn 和 Puma )。那么你认为目前 Passenger 在这个生态系统中处于什么位置?
其他的Ruby应用程序服务器比Passenger有更多的范围限制。它们需要用户启动一个或者多个进程,将它们设置为监听sockets,配置反向代理规则等。对于想要严格控制整个系统的专家而言这并不一定是错误的方法,但是却不同于我们的哲学。我们希望软件易于安装、使用和管理,同时依然可以保持稳定性和灵活性。
但是话说回来,我们都互相学习了很多内容。例如,Passenger的“智能产卵(smart spawning)”功能在日期上要早于Unicorn,但是Passenger的带外工作功能借鉴了Unicorn的,尽管我们对该功能做了改进。每一种服务器都有它自己的优势和劣势。
转载
⑦ 如何安装和使用Beanstalkd工作队列
使用aptitude安装:
下载并安装Beanstalkd运行以下命令:
aptitude install -y beanstalkd
编辑默认配置文件让随着系统启动
vim /etc/default/beanstalkd
打开文件后,向下滚动并找到底部线#开始= yes。将其更改为:
START=yes
下面介绍源码安装
我们需要从源代码安装过程的一个关键工具- Git。
运行以下获取Git在你系统上:
aptitude install -y git
下载必要的开发工具软件包:
aptitude install -y build-essential
使用Git克隆(下载)官方库:
git clone https://github.com/kr/beanstalkd
进入到下载目录:
cd beanstalkd
从源代码构建应用程序:
make
安装:
make install
再介绍一下centos下源码安装:
下载地址:
wget http://cloud.github.com/downloads/kr/beanstalkd/beanstalkd-1.4.6.tar.gz
解压:
tar xzf beanstalkd-1.4.6.tar.gz
cd beanstalkd-1.4.6
/configure
make
make install
默认安装路径 :/usr/local/bin/
查看版本:
/usr/local/bin/beanstalkd -v
1.4.6
再附加一个启动脚本,从Fedora下挖来的 startup 脚本:
#!/bin/sh
#
# beanstalkd - a simple, fast workqueue service
#
# chkconfig: - 57 47
# description: a simple, fast workqueue service
# processname: beanstalkd
# config: /etc/sysconfig/beanstalkd
#
### BEGIN INIT INFO
# Provides: beanstalkd
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Stop: 0 1 2 6
# Short-Description: start and stop beanstalkd
# Description: a simple, fast work-queue service
### END INIT INFO
# Source function library.
/etc/rc.d/init.d/functions
# Source networking configuration.
/etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit
exec="/usr/local/bin/beanstalkd"
prog=$(basename $exec)
# default options, overruled by items in sysconfig
BEANSTALKD_ADDR=127.0.0.1
BEANSTALKD_PORT=11300
BEANSTALKD_USER=beanstalkd
[ -e /etc/sysconfig/beanstalkd ] && . /etc/sysconfig/beanstalkd
lockfile=/var/lock/subsys/beanstalkd
start() {
[ -x $exec ] || exit 5
echo -n $"Starting $prog: "
# if not running, start it up here, usually something like "daemon $exec"
options="-l ${BEANSTALKD_ADDR} -p ${BEANSTALKD_PORT} -u ${BEANSTALKD_USER}"
if [ "${BEANSTALKD_MAX_JOB_SIZE}" != "" ]; then
options="${options} -z ${BEANSTALKD_MAX_JOB_SIZE}"
fi
if [ "${BEANSTALKD_BINLOG_DIR}" != "" ]; then
if [ ! -d "${BEANSTALKD_BINLOG_DIR}" ]; then
echo "Creating binlog directory (${BEANSTALKD_BINLOG_DIR})"
mkdir -p ${BEANSTALKD_BINLOG_DIR} && chown ${BEANSTALKD_USER}:${BEANSTALKD_USER} ${BEANSTALKD_BINLOG_DIR}
fi
options="${options} -b ${BEANSTALKD_BINLOG_DIR}"
if [ "${BEANSTALKD_BINLOG_FSYNC_PERIOD}" != "" ]; then
options="${options} -f ${BEANSTALKD_BINLOG_FSYNC_PERIOD}"
else
options="${options} -F"
fi
if [ "${BEANSTALKD_BINLOG_SIZE}" != "" ]; then
options="${options} -s ${BEANSTALKD_BINLOG_SIZE}"
fi
fi
daemon $exec -d $options
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
# stop it here, often "killproc $prog"
killproc $prog -INT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
rh_status() {
# run checks to determine if the service is running or use generic status
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?
使用Beanstalkd
在安装之后,您就可以开始使用Beanstalkd服务器。以下是运行守护进程的选项:
-b DIR wal directory
-f MS fsync at most once every MS milliseconds (use -f0 for "always fsync")
-F never fsync (default)
-l ADDR listen on address (default is 0.0.0.0)
-p PORT listen on port (default is 11300)
-u USER become user and group
-z BYTES set the maximum job size in bytes (default is 65535)
-s BYTES set the size of each wal file (default is 10485760)
(will be rounded up to a multiple of 512 bytes)
-c compact the binlog (default)
-n do not compact the binlog
-v show version information
-V increase verbosity
-h show this help
使用例子:
# Usage: beanstalkd -l [ip address] -p [port #]
# For local only access:
beanstalkd -l 127.0.0.1 -p 11301 &
管理服务:
如果安装包管理器(i.e. aptitude),你将能够管理Beanstalkd作为服务守护进程。
# To start the service:
service beanstalkd start
# To stop the service:
service beanstalkd stop
# To restart the service:
service beanstalkd restart
# To check the status:
service beanstalkd status
获得Beanstalkd客户端库
Beanstalkd配有一长串的支持客户端库来处理许多不同的应用程序部署。这个列表的支持语言和框架,包括:
●Python
●Django
●Go
●Java
●Node.js
●Perl
●PHP
●Ruby
●and more.
查看完整列表支持,寻找你最喜欢的语言和安装说明,查看客户端库页面Beanstalkd Github上。
使用Beanstalkd
在本节之前,完成这篇文章,让我们快速Beanstalkd的基本用法。在我们的示例中,我们将使用Python语言和Beanstald Python bindings ——beanstalkc。
安装beanstalkc,运行以下命令:
pip install pyyaml
pip install beanstalkc
基本操作
在所有Python文件你想处理Beanstalkd时,需要导入beanstalkc并连接:
import beanstalkc
# Connection
beanstalk = beanstalkc.Connection(host='localhost', port=11301)
To enqueue a job:
beanstalk.put('job_one')
To receive a job:
job = beanstalk.reserve()
# job.body == 'job_one'
To delete a job after processing it:
job.delete()
To use a specific tube (i.e. queue / list):
beanstalk.use('tube_a')
To list all available tubes:
beanstalk.tubes()
# ['default', 'tube_a']
Final example (nano btc_ex.py):
import beanstalkc
# Connect
beanstalk = beanstalkc.Connection(host='localhost', port=11301)
# See all tubes:
beanstalk.tubes()
# Switch to the default (tube):
beanstalk.use('default')
# To enqueue a job:
beanstalk.put('job_one')
# To receive a job:
job = beanstalk.reserve()
# Work with the job:
print job.body
# Delete the job:
job.delete()
当您运行上面的脚本时,您应该会看到工作的主体被打印:
python btc_ex.py
# job_one
⑧ 如何在php上安装phalcon
下载phalcon 把phalcon.dll 放到相关目录,一般是ext里面 在php.ini中添加 extension=phalcon.dll 重启环境[371] => PhalconEventsException)
备注:芝麻背调整理回答。芝麻背调,用技术推动行业进步。