【问题集锦】CDN版十万个为什么,常见问题持续更新中......
产品相关
一、阿里云的带宽处理能力?
阿里云CDN目前总处理能力为 80Tbps。
二、阿里云CDN目前在国内多少个节点,是否有海外节点?
阿里云CDN全球节点 1200+,会覆盖到电信,联通,移动,铁通,教育,长宽、各运营商,部署在全球60多个国家和地区,覆盖六大洲。
三、CDN的使用场景都有哪些?
访问量大的网站、如:在线视频、游戏、图片、音频、社交、电商、下载站等。CDN就是将内容缓存在离用户更近的节点上,以此来提高用户体验;所以CDN适用于具有一定量级的静态资源访问,包括html,js,css,apk,mp3,flv,jpg,gif、mp4、flv等所有的静态资源。
四、 如何使用阿里云CDN可以使加速效果达到最优?
结合阿里云其他产品使用,能够优化回源速度,进一步优化加速效果。
天然无缝配合OSS使用,提高网站访问速度,有效降低OSS的外网流量费用。
结合ECS使用,提高网站可用性,保护服务器源站信息,降低带宽使用成本。PS:可使用SLB做为源站地址回源。
计费相关
一、CDN的计费方式?
阿里云CDN主要有多种计费方式供用户选择,并且开放多种优惠活动,点击了解详情
二、如何选择合适的计费方式?
您可以根据自己的业务情况选择更适合您更节省成本的计费方式。
估算下自己业务的带宽利用率,主要参考每日的流量及峰值带宽。计算出自己的带宽利用率。带宽利用率高的用户适合使用按峰值带宽计费,反之则适合使用按流量计费。
大致选择标准为:带宽利用率大于30%的用户适合使用按带宽计费(因计费价格为阶梯计价,实际计算会略有不同,以实际计算结果为准)。
注:带宽利用率=实际使用流量/峰值带宽100%利用率产生的流量,1Mbps带宽每日100%利用率产生的流量约为10.54GB
三、是否可以切换计费模式?
支持用户在按流量计费和按带宽峰值计费两种计费方式间切换;您可在CDN产品控制台直接操作变更。
注:在一个自然日内,限制用户变更计费方式次数为1次,变更和计费将在第二日零点后生效;例:用户在今天6月16日的10:00提交了变更计费方式那么该变配申请将在明天6月17日00:00后生效。
四、 发生账户欠费后,CDN会停止服务么?
当您未付清CDN服务产生的账单,则服务处于欠费状态服务欠费后延时24小时停服,在欠费后24小时内会以短信/邮件的方式提醒用户尽快支付账单,在欠费后24小时内进行充值,您的服务将不会受到停服影响;如您未在欠费后24小时内未能及时充值。CDN服务将停止服务;停止服务后,CDN也将停止计费。您所占用的Cache资源将被释放,配置信息保留12个月。
五、仅停用CDN加速域名,仍会有费用产生么?
停用CDN加速域名后,系统会保留该域名的配置信息,但是边缘节点停止服务,访问CDN节点会直接报错,因此不会产生其他费用。删除加速域名后,系统将不会保留该域名任何配置信息。
CDN沙箱相关
当您的域名遭受攻击时,系统会自动将您的域名切入沙箱,此时您的加速服务停止,请及时采取措施,减少服务停止带来的影响。
一、为什么受到攻击会进入沙箱?
阿里云CDN是公共的内容加速服务,承载成千上万的加速域名在内容加速网络上运行;当您的域名遭受攻击时,不仅会影响阿里云CDN的正常加速服务,也可能会影响到其他用户的加速服务,为保证稳定的加速服务质量,我们需要将您受到攻击的域名切入沙箱。
二、进入沙箱后域名加速服务会受到什么影响?
域名进入沙箱后,该域名的加速服务基本停止不可用,建议您根据域名被攻击频率购买阿里云高防产品或者其他第三方的防护服务。注:对于多次被攻击,或者违反产品限制导致被攻击的域名,阿里云CDN保留不再接入该域名加速服务的权利。
三、如何减轻因攻击导致域名进入沙箱带来的影响?
阿里云CDN不承担防网络攻击的义务,如果您的域名有攻击风险或正在遭受攻击,建议购买阿里云的高防服务,或者购买其他第三方的防护服务保证域名的正常使用。
注:违反产品限制接入的域名,若您的域名遭受攻击,您需要自行承担因攻击而产生的全额费用
四、如何知晓您的域名是否在沙箱中
当您的域名被切如沙箱中后,您会收到一条短信提示,同时您可以在控制台的域名状态中,查看域名是否处于沙箱中。
加速内容相关
一、CDN支持的文件类型有哪些?
目前支持所有格式的文件,针对不同的文件可以选择不同的加速方式,目前主要提供四种分发方式:
图片及小文件分发
大文件下载加速
视频流媒体加速
直播流媒体加速
二、 源站域名可以和加速域名一致么?
不可以,源站类型为域名时,源站域名不允许和加速域名相同;若用户请求某资源,该CDN节点上没有缓存相应的内容,CDN节点则会回到源站获取,然后再返回给用户,若加速域名与源站域名一致,会导致请求反复解析到CDN节点上,CDN节点无法回源拉取内容。因此建议,如果加速域名为:example.aliyun.com,源站可以考虑 src.example.aliyun.com,以做区分。
三、CDN对于加速内容文件大小有何限制?
无限制,针对文件大小,可以选择适合的分发方式
若加速内容多为图片及网页文件,推荐使用图片小文件加速
若加速内容为大文件(一般来说20M以上的静态文件属于大文件范畴),推荐使用大文件加速下载
若大文件为视频文件,加速视频的点播业务,推荐使用视音频点播加速方式
若为视音频直播业务,请选择直播流媒体业务类型
四、 针对动态文件可以进行加速分发么?
如果加速域名下面的文件类型多为动态文件,强烈建议做动静分离;动态内容采用独立域名,不使用CDN加速
五、采用CDN服务对源站点是否需要改造?
基本不需要,但建议用户先做动静分离,以达到更优的加速效果,动态文件和静态文件放在不同的域名下面,静态资源加速。
六、 CDN是对网站所在的服务器加速,还是对域名加速?
是针对某个域名下面加速的,如果该域名完成了加速配置,那么这个域名下面的文件的访问都会通过CDN
缓存相关
一、CDN默认缓存规则是什么?
我们支持全站加速,请您根据自己的业务需要进行调整
Cache的默认缓存策略
温馨提醒:如您有动态文件需要设置为No Cache ,针对No Cache 的目录或者 URL 使用三级域名让其流量直接走源站,可以减少您不必须要的流量费用
二、CDN文件的缓存时间是多久?
文件的缓存时间,是指文件在浏览器中的缓存时间周期。
CDN 缓存服务器严格遵守http的标准协议,具体的缓存时间由http 响应头里面的 Cache-Control 和 Expires 响应头控制
Html的文件缓存时间查看方式:查看http消息头里面的 Cache-Control ,如“Cache-Control max-age=2592000(秒)”,表示文件将会缓存30天。这时除非使用手动刷新,否则新开的浏览器页面在文件缓存周期内都不会去回源重新获取文件。
三、是否支持源站的Cache-Control设置?
支持,CDN的cache软件本身是遵循http协议的,所以具体的缓存时间由用户的文件header头来控制的,由 Cache-Control 或 Expires 来控制的。
四、缓存策略设置注意事项是什么?
对于不经常更新的静态文件,建议将缓存时间设置为1个月以上(eg:图片类型,应用下载类型);
对于需要更新并且更新很频繁的静态文件,可以将缓存时间设置短些,视业务情况而定(eg:js,css等);
对于动态文件(eg:php | jsp | asp),优先选择第二种方案
请务必将 Cache-Control 设置为no-cache, private或者max-age=0。(动态文件一般类似是带有cookie id 的登陆页面,交易页面,或者是需要与数据库进行交互生成的页面), 这样CDN就不会做缓存,直接回源站;
如果加速域名下面的文件类型多为动态文件,强烈建议采用独立域名,不用CDN加速
注意:变更缓存配置规则后,新规则不会立即生效,在“原有缓存配置”时间失效后,新的配置会自动生效;若要立即生效,需要手动刷新,注意:目录刷新请仔细评估资源回源量,以免造成源站压力
五、如何保证节点缓存数据的更新和同步,是实时么?
CDN的更新不实时,首先建议用户不要做同名更新,如果必须是同名更新,用户源站更新之后,需要从控制台提交刷新请求,或者使用API,完成主动刷新。如果不主动提交刷新,只能等待缓存文件到期后才能回源拉取最新的文件。
六、缓存刷新操作有限制么?
目前支持单条URL刷新和目录刷新两种方式,其中单条URL刷新生效时间在5分钟,每天最多刷新2000条URL;目录刷新的生效时间大概在5分钟,每天支持100次目录刷新操作
缓存刷新、缓存预热的区别和使用场景是什么?
缓存刷新:强制将分发节点上缓存的资源标记为过期,当用户再次对该资源发起请求时,节点会回源拉取资源,并缓存一份更新后的资源在分发节点缓存预热:主动触发将源站资源推送到边缘节点,用户访问资源时,可以直接命中缓存,缓解突增回源流量给源站造成的压力
性能相关
一、CDN的缓存命中率是多少?
这个要看用户数据的热点。文件的访问量越大,命中率相应的就会越高;按正常情况基本上是 95%+
二、如何判断请求是否命中?
回包中的哪些数据证明是命中了CDN缓存,可以查看Response Headers中关于X-Cache的信息
若:X-Cache:HIT TCP_MEM_HIT 表示命中缓存
若:X-Cache:MISS TCP_MISS 则表示未命中缓存
三、命中率如果较低的原因是什么?
网站访问量较低,文件热度不够,CDN收到请求较少无法有效命中缓存
缓存配置不合理,针对某些文件设置较短,导致CDN节点频繁回源
HTTP Header设置导致无法缓存,需要用户检查源站的 Cache-Control 设置或者 Expires 的设置
源站动态资源较多,多为不可缓存的内容,也会导致频繁回源拉取
四、CDN什么情况下会回源拉取资源?
用户访问时,如节点上无缓存,则会回源拉取资源
CDN节点上的文件超时过期,会回源拉取资源
若为不缓存文件,用户访问时,会直接回源
五、回源带宽峰值高于网络带宽峰值如何理解?
使用了URL预热功能,该功能会将源站资源主动预热到到L2 Cache节点上,引起回源流量的增长,但不会引起网络流量增长,造成回源带宽峰值高于网络带宽峰值
针对大文件,由于CDN的一级缓存和二级缓存均支持range回源,会有效降低网络带宽峰值,若用户的源站不支持range回源,大文件回源将会引起回源带宽峰值增长,造成回源带宽峰值高于网络带宽峰值
六、CDN回源失败的场景有哪些?
源站带宽或计算过载,导致无法正常回源
源站存储的资源有问题,不能正常回源访问资源
可以考虑通过设置缓存时间的方式,降低回源率,并对源站进行升级扩容
七、CDN的配置时间通常是多久?从域名审核通过到加速域名各节点生效,保证在30分钟以内。状态为“配置中“的加速域名无法进行域名信息的设置,需要等配置完成后,在进行域名信息设置操作
八、L2层节点的作用是什么?
L2层节点是位于用户源站和CDN L1节点中间的缓存服务器,可缓存CDN L1节点的回源访问,有效地降低用户源站的访问压力
功能相关
一、是否支持HTTPS加速?
支持,详细请了解 HTTPS安全加速设置
二、是否支持泛域名加速?
目前图片小文件加速、大文件下载加速、视音频点播加速均支持泛域名添加;直播业务和HTTPS安全加速暂不支持泛域名。
三、使CDN加速真正生效,如何完成解析设置“CNAME绑定”?
详细请了解CNAME绑定教程
四、加速域名“停用”和“删除”的区别?
“停用”该加速域名后,该条加速域名信息仍保留,针对加速域名的请求系统将做自动回源处理
“删除”该加速域名后,将删除该加速域名的全部相关记录,对于仅需要暂停使用该加速域名,推荐选择“停用”方式
在控制台上“删除”某加速域名,需要保证该加速域名已处于“停用”状态
注意:强烈推荐用户在“停用”或者“删除”某加速域名前,到该域名所在的域名解析服务商处恢复域名A记录,保证用户站点可正常访问
五、CDN资源监控有哪些?
流量统计:监控单个或多个域名的运营情况,按照域名、时间,统计流量和带宽实时信息,包含网络流量和回源流量统计
请求命中率:时间粒度内所有请求命中缓存的概率,即Cache节点向最终用户提供服务产生的请求数占用户所有请求数的概率
字节命中率:时间粒度内请求的字节数命中缓存的概率,注“字节=请求数 x traffic”,字节命中率更直接反馈了回源流量
访问QPS:qps=时间粒度内的总访问次数/时间粒度
HTTP CODE:时间粒度内http返回码例如200、304、404、500等占比关系
PV:统计一个时间段内当前域名下资源文件的访问次数
UV:统计一个时间段内当前域名下独立请求的IP次数
用户区域分布:分析用户在不同区域的访问量占比
运营商占比:分析用户在的访问量占比
文件响应占比:分析用户不同大小的文件在所有响应中的占比情况,该结果支持按日查看
URL访问次数统计:按访问量统计排名前100的URL列表
页面引用URL统计:按访问量统计排名前100的加速页面(通过引用URL资源)
CC监控:时间粒度内攻击带宽峰值和攻击访问次数(codeilist),攻击信息包括攻击者IP以及被攻击的URL目标
备注:默认区域是用户购买的所有节点地区,默认监控域名是该用户下所有域名
应用容灾中,MySQL数据表是否需要跨云同步?
作者 | 向迪来源 | 阿里技术公众号一 背景容灾系统的重要目标在于保证系统数据和服务的“连续性”。当系统发生故障时,容灾系统能够快速恢复服务和保证数据的有效性。为了防止天灾人祸、不可抗力,在同城或异地建立对应的IT系统,其中最核心的工作是数据同步。本文选取应用层容灾的场景中,对于哪些数据表需要跨云同步,哪些数据表不需要跨云同步的问题进行探讨。通过一个具体的案例,帮助读者更好地梳理同步表和过滤表的方法,以满足应用层的业务容灾需求。二 相关术语本文探讨的场景是基于阿里云构建的应用层容灾,涉及到以下关键术语:RDS MySQL:MySQL 版是全球最受欢迎的开源数据库之一,作为开源软件组合 LAMP(Linux + Apache + MySQL + Perl/PHP/Python) 中的重要一环,广泛应用于各类应用场景。阿里云RDS MySQL版,通过深度的内核优化和独享实例提供稳定极致的数据库性能,同时灵活的部署架构及产品形态,可满足不同场景下的数据库需求。DTS:数据传输服务(Data Transmission Service) 支持关系型数据库(MySQL等)、NoSQL、大数据(OLAP)等数据源间的数据传输。 它是一种集数据迁移、数据订阅及数据实时同步于一体的数据传输服务。数据传输致力于在公共云、混合云场景下,解决远距离、毫秒级异步数据传输难题。 使用数据传输轻松构建安全、可扩展、高可用(容灾)的数据架构。ASR:ASR-DR(Apsara Stack Resilience Disaster Recovery)是一款提供容灾功能的云产品,支持RDS MySQL的容灾管理。ASR是为了在灾难发生时,快速地实现容灾切换,尽可能地降低RTO,而开发的基于图形交互的切换工具。同步表:本文特指RDS MySQL的数据库和数据表中,哪些表必须从一朵云备份到另外一朵云,即跨云同步。过滤表:本文特指RDS MySQL的数据库和数据表中,哪些表不能或不需要,从一朵云备份到另外一朵云。应用配置表:本文特指应用层在RDS MySQL中的数据表,这个表记录应用层的相关配置信息,比如IP、域名、定时任务的开关状态等等。Sequence:全局唯一序列号ID,在分布式系统里面应用广泛,可用于交易流水号,用户ID等。 在搜索, 存储数据, 加快检索速度等等很多方面都有着重要的意义。这个ID常常是数据库的主键,要求全局唯一、支持高并发、容错单点故障。为了提高性能,应用层通常每次从数据库中获取一批序列号(比如1万个),存放到应用内存中使用,避免频繁访问数据库。内存中的序列号使用完成后,再次从数据库中进行获取新的一批序列号。三 应用容灾中关于过滤表的关键技术问题为什么需要梳理不做跨云同步的过滤表?非容灾应用备中心资源限制:实际项目中,受限于备中心的资源限制,无法在备中心内部署应用系统,因此非容灾的应用对应的数据库和数据表无需同步。运维临时备份库和备份表无需同步:在日常运维中,DBA在对数据库进行变更时,通常会做临时性备份。临时备份的数据库或数据表,由于阿里云 RDS MySQL集群本身已经在后台进行了备份,无需用户再做一次跨云同步。这样可以减少同步链路的带宽和容灾切换的管理工作量。不支持容灾的应用:云产品的容灾能力建设是一个持续过程,某些云产品在项目交付阶段暂时还不具备容灾能力,但是用户的应用依赖了这些指定的云产品。因此这部分的应用暂时无法做容灾演练,对应的数据库和数据表也可以暂时不做同步。待应用的全流程依赖的云产品都支持容灾后,再进行数据同步即可。有差异的配置表应用配置的方式:应用系统为了将代码和配置分开管理,通常将配置参数单独存放和管理。常见的配置形式有配置文件、RDS MySQL数据库、专用的配置中心,其中专用配置中心后台也用了RDS MySQL来存储数据。比较忌讳的方式是在代码中硬编码配置参数,如IP、域名等。环境参数:应用软件在使用云产品如RDS MySQL、OSS、SLB等产品时,需要通过IP、域名、账号密码、AK/SK进行连接。应用参数:某些功能只能在一个中心内的应用执行,这些功能开关在数据表里面的某些字段值进行控制。比如某些定时任务,会定期和外部机构发生批处理的调用。如果双中心的定时任务同时运行,可能会导致外部机构的批处理重复执行,这依赖于外部机构能否支持重复执行相同的批处理任务。这些定时任务的配置表需要在双中心分别配置。同城容灾的配置方式:第2点的环境参数默认是相同的。同城一朵云的双中心距离较近(小于100公里),应用部署在一朵云的两个可用区,云产品连接信息是相同的。因此应用软件在部署时,访问的是相同的环境参数。此场景中,需要梳理有差异的环境参数是比较少的。异地容灾的配置方式:第2点的环境参数存在差异。同城两朵云的双中心距离较远(大于100公里),应用部署在两朵云的两个可用区,云产品连接信息是不同的。因此应用软件在部署时,访问的是不同的环境参数。此场景中,需要每个应用分别梳理差异的环境参数。差异的环境参数所在的数据表不能跨云同步,否则会导致应用系统部署失败。需要双写的业务表双写的场景:a)业务流量在双中心同时处理,称为应用层双活,需要同时向双中心写入数据表。b)应用运行期记录微服务的调用日志等。理想情况下,应该是有业务流量在处理时,应用才会向数据库中记录数据。实际项目中,业务也会出现特殊情况,在备中心的应用,即使没有流量请求,也会定期写入一些日志,比如微服务调用日志、定时任务日志、应用启动时更新全局唯一序列号Sequence等等。双写的场景,要求主中心和备中心的RDS MySQL都具备读和写权限。同城双活场景:同城一朵云的双活架构中,主中心和备中心对应用层提供统一的云产品连接信息,应用都具备向RDS MySQL的写入权限。异地主备场景:异地两朵云的主备架构中,主中心RDS MySQL对应用层提供读写权限,而备中心RDS MySQL向应用层提供只读权限。这种权限策略无法满足第1点中的双写要求。因此对于双写的表,需要按照应用维度梳理过滤表。如何梳理不做跨云同步的数据表?在项目中会发现,应用软件开发商更关注业务逻辑的实现,对于云产品使用的最佳实践以及容灾能力的了解程度,可能和我们的预期存在一定的差异。而梳理过滤表,主要由应用开发商来执行,在梳理过程中有几个常见的问题。设计和开发时期,开发人员应该如何做来减少容灾时候不同步的过滤表?部署和运维时期,运维人员应该从哪些角度来确保过滤表的完整性和正确性?如果梳理错误,对应用层容灾演练有什么影响?在项目中,往往受限于工期和生产系统稳定性运行的约束,应用开发商和云平台厂商即便清楚设计和开发的最佳实践,也比较难限时完成改造。因此部署和运维期的时候,梳理过滤表和准备应急预案,是容灾演练的重点工作项。我们来分析一下,如果梳理过滤表错误,可能对应用层容灾有什么影响?对非容灾应用的影响:几乎没影响。前面分析过,建议非容灾的应用可以不做数据备份,或者备中心应用在备份数据上不做为生产用途。对容灾应用的影响:备中心部署应用后,启动应用失败,此时能够识别出错误的环境参数。应对措施是停止对应数据表的同步,修正读写权限后继续部署。备中心应用在测试功能时,重点关注后台定时任务和非业务请求写RDS MySQL的场景,在测试阶段修正过滤表的清单。对生产系统运行期做容灾切换演练,在异地容灾架构中,错误的过滤表清单可能会导致数据库主键写冲突的错误,进而出现写业务失败问题。此时可通过应急预案,紧急停止或增加同步功能或修正数据表字段值,重启应用方式的手段来恢复。在下次演练前修正过滤表清单。本文后面将对此场景用一个案例简单说明。四 在应用容灾中设计不同步的数据表前面我们已经介绍了应用容灾中哪些表不同步的必要性,本节我们来探讨如何梳理和设置过滤表。以下分析是比较理想的情况,实际项目中会有一些差别。云平台角度了解云平台的能力:目前主流的云平台厂商都有RDS MySQL产品,但是每家厂商的RDS MySQL在同城多可用区和异地多Region中的容灾能力是有区别的。用户需要了解,每家云厂商的数据同步能力,在同城和异地两种情况下,是后台自动完成?还是利用工具(如阿里云的DTS)?还是人工写脚本完成?配置过滤表的方式:阿里云DTS产品支持在创建RDS MySQL实例同步链路时,配置哪些数据库和数据表不同步。自动配置过滤表功能:在容灾演练过程中,会涉及主切备、备切主,因此对应数据同步方向发生反转,我们称成为正向同步和反向同步。当发生同步方向反转时,需要容灾切换平台支持自动配置过滤表。阿里云ASR-DR支持第一次创建同步链路时,保存过滤表的清单,后续每次同步方向切换时,由ASR-DR自动给新的链路配置过滤表。如下是阿里云数据数据传输服务DTS产品公开的资料文档。应用层角度接下来我们从应用开发商比较关注点几个阶段,分析如何有效性地基于云容灾来交付应用软件。1.设计阶段:基于云容灾的设计思路。考虑应用未来会部署在两朵云或多朵云,有可能是不同厂商的云平台上。因此早期基于IOE架构的容灾架构,由专业存储硬件完成的数据层同步在多云场景下将不适用,而Oracle昂贵的license也是很多企业难以接受的。考虑为每朵云和每个中心预留标识参数,用于表示当前配置适用于哪朵云上。由配置中心统一管理当前运行环境上是哪朵云的参数生效,应用代码无需关注自己运行在哪朵云上。识别哪些场景的功能只能在其中一朵云上运行的,并为这些功能安排开关。通过配置中心并将开关设置为可动态配置和生效。重点关注定时任务。建议将这些功能开关的操作放在白屏界面,便于在容灾切换有限而紧迫的时间内,允许运维人员快速操作,而不是打电话到处问人,关闭某个定时任务是在哪个库、哪个表的哪个字段来控制开关。记录过滤表清单,并及时更新。2.开发阶段:优先使用配置中心来保存参数。实际项目中,保存配置的方式有多种方式,包括配置中心、配置文件、RDS MySQL、甚至还有在代码中直接编码某个地址、账号密码。阿里云EDAS产品提供配置中心功能,支持动态配置、静态配置,以及配置变更后动态推送,而不需要应用重启才能生效。配置中心本身的地址,可以记录在应用的配置文件中,将配置文件和应用程序一起打包发布。因为配置中心服务在部署后,很少会发生变化。如果暂时无法使用配置中心,必须要用RDS MySQL来管理配置。建议将记录不同云环境参数的配置放在独立的数据表中,单独提供功能开关的配置也放在独立的数据表中,不要和业务表耦合在一起。好处是降低了管理过滤表的难度。重点关注云产品的域名、IP、账号密码、AK/SK。3. 部署阶段:运维人员和开发人员,确认清楚每个过滤表的被选中的原因,背后的业务依据是什么?重点关注是否多配了过滤表。登陆每个数据库,检查容灾切换平台ASR-DR是否按照预期来设置过滤表。当过滤表有上百个的时候,容易出现遗漏或错误。创造条件在备中心上提前验证业务功能,重点关注过滤表场景是否符合预期,关注定时任务是否只在一个中心上运行。4. 运维阶段:配置变更在两朵云上的过滤表同时执行。当在主中心上对过滤步表进行了变更后,如增加字段或调整字段类型,备中心无法感知到,需要手工在备中心上做同样的修改。否则容灾切换到备中心后会因为表未更新导致应用错误。过滤表恢复为同步表。早期梳理过滤表清单有误,多配置了过滤表,后来验证需要同步。需要重新对数据表做全量数据同步,并在容灾管理平台ASR-DR上修改这个表是否同步的标志。同步表改为过滤表。早期同步的表,由于业务做了调整,后续无需再同步,需要在容灾管理平台ASR-DR并在容灾管理平台ASR-DR上修改这个表是否同步的标志。下图为异地容灾主备架构下,同步表和过滤表的配置逻辑说明。五 案例下面分析一个异地容灾的项目中,由于过滤表清单梳理错误,导致业务异常问题及处理经验,便于读者对数据表是否需要跨云同步更有体感。(1)问题描述在阿里云容灾平台ASR-DR对某个应用执行容灾切换(RDS MySQL读写权限从Cloud A切换至Cloud B)后,业务请求在备中心(Cloud B)时,业务报错,数据库提示“主键冲突”。(2)问题分析我们根据问题处理的先后顺序,对问题定位过程进行分析。1. 分析数据库报错“主键冲突”:确认冲突的字段值为交易流水号ID。检查业务数据表,确认这个ID的交易信息已经存在。2. 分析业务请求路径:分析是否接入层流量调度异常导致的双写。在异地容灾的主备架构中,通过接入层的全局负载均衡设备GSLB控制,保证只有主中心有业务请求流量,备中心没有业务请求流量。因此双中心业务双写导致的主键冲突的嫌疑可以排除掉。分析是否为主中心应用层缓存在主备切换后延迟写入数据。在主备架构中,容灾平台ASR-DR平台会保证主中心的RDS MySQL数据库权限设置为只读后,才会对备中心的应用开放对RDS MySQL的读写权限。即使主中心的应用层有缓存延迟写入,在容灾切换后,主中心应用没有权限写入数据,不会出现双写场景。排除此嫌疑。分析是否为容灾切换前已使用了该序列号。登陆主中心的数据库,检查序列号字段当前可用范围是[90000000000, 18446744073709551615],说明小于90000000000的序列号已经被使用。而当前提示主键冲突的序列号80000000000已经在业务表中有对应的交易记录。因此确认这个交易记录号是在主中心使用过了。分析备中心应用获取序列号的记录。从应用日志看到,备中心应用在首次启动时,获取了一次最新的序列号,后面没有再从数据库获取最新的序列号。同时检查应用的内存值,发现备中心当前正在使用序列号范围[80000000000, 80000009999]。显然这是过期的序列号。问题结论:备中心应用使用了过期的交易流水号ID,导致的写数据库出现“主键冲突”。3. 分析问题引入过程:分析应用获取序列号的流程:应用首次启动时,从数据库中获取1万个可用的序列号,并更新数据库和应用的内存值。分析主备中心上的数据同步机制:作为管理全局唯一性序列号的数据表xx_table,通过数据同步工具DTS能够保证数据实时在双中心之间同步,且应用在更新数据库序列号时,对数据库加锁防止不一致。理论上不会出现主备中心上获取到相同的序列号。分析主备中心上数据表xx_table内容是否一致:发现主中心上的序列号可用范围是[90000000000, 18446744073709551615],而备中心的序列号可用范围是[80000010000, 18446744073709551615]。两者并不一致,说明数据表并没有同步。检查数据同步工具DTS:工作正常,未发现任何错误或故障。检查过滤表清单:管理全局唯一性序列号的数据表xx_table应该跨云同步,但是却被配置为过滤表,导致了数据无法同步。检查过滤表的梳理过程:在容灾演练前的准备阶段,运维人员在备中心部署应用后,业务人员验证功能交易失败。失败原因是应用启动时获取序列号后写数据库失败,提示无写权限,因此交易功能初始化失败。在主备架构下,默认主中心应用对RDS MySQL有读写权限,备中心对RDS MySQL有只读权限。而备中心启动时需要些权限,因此业务人员将管理全局唯一性序列号的数据表xx_table加入到了不同步的过滤表清单中,导致这张表没有从主中心同步到备中心。问题结论:管理全局唯一性序列号的数据表xx_table被错误地加入到了不做跨云同步的过滤表清单应急措施手动将备中心的数据表xx_table中的序列号有效范围,修正为正确的[90000000000, 18446744073709551615]。重启备中心的应用软件,触发应用重新获取序列号。改进措施同步数据:管理全局唯一性序列号的数据表xx_table需要同步,从过滤表清单中移除xx_table,确保主备中心的有效序列号范围一致。应用改造:当备中心对RDS MySQL有只读权限时,允许更新序列号失败,应用初始化成功。当容灾切换后,备中心获得RDS MySQ读写权限后,由业务请求触发重新按需获取最新的序列号。测试效果:主中心和备中心同步数据完成后,断开同步链路,手动设置备中心数据库为只读。重新部署改造后的应用,在只读模式下,验证应用启动成功,并且业务请求失败(符合预期)。手动设置备中心数据库为读写,业务请求成功,检查应用是否成功重新获取到有效序列号。重新配置主中心和备中心数据同步链路。容灾演练:再次进行演练来验证全业务场景。改进前改进后六 小结容灾演练是发现系统性问题的起点,不是终点,需要定期开展演练来保鲜系统的容灾能力。云平台容灾不等于应用容灾,应用级容灾是系统性工程。通过演练来检查工程能力,技术上包括云平台、应用和网络;流程上包括故障判断、容灾决策、切换操作、应急预案等。七 诚邀有志之士阿里云的两地三中心、异地多活等高可用架构通过了多年双十一大促的考验。目前阿里云向全球用户开放这些高可用架构的技术红利,帮助用户的IT系统更健壮。欢迎有志人士加入我们,有兴趣的同学可以投递简历到xiangdi.lyc@antfin.com
阿里云服务器 小白搭建博客全过程
一、自我介绍:是一个普通的大三学生,就读计算机科学与技术专业,在经历了两周的学习之后,在此记录下期间遇到的问题和解决过程,希望可以帮助到更多像我这样的小白,节约时间提高效率。这个过程离不开互联网上许许多多大佬的博客教程,这次的“飞天加速计划”活动也是在一篇博客中发现的,向学生群体推荐这次体验活动,也才有了首次使用云服务器的经历,感谢阿里云这个平台,能够提供给我们普通学生这次机会,下面是这次的记录。二、阿里云ECS博客搭建过程领取到服务器之后,在论坛上查询了一些服务器的用途,决定先从简单的开始,搭建一个自己的博客1)首先就是需要我们在活动界面领取一台服务器,具体的配置规格可以根据自己的需求选择,一般使用的是Linux系统,CentOS2)之后就要前往ESC管理控制台,然后我们可以在实例中修改密码3)之后修改安全组:宝塔需要8888端口,要进入到阿里云控制台 放行8888端口才能访问到面板参考以下截图进行操作即可访问面板4)选择公网入方向-新建规则如果你进入面板里修改了面板端口或FTP端口,记得要在安全组和面板防火墙放行相应端口5)下载XshellXshell可以帮助我们连接到我们的服务器 1)安装之后,运行起来会出现如下的界面2) 后输入公网的ip地址3) 出现如下画面,则说明连接成功4)下载好之后就会在末尾出现下列信息,分别是网站,用户名,和密码,这三则信息需要记住!保存下来5)在浏览器中打开刚才的网址,然后输入用户名和密码,登陆即可6)在该界面一键安装,为了能安装wordpress,php版本必须在5.6以上7)部署wordpress注册登录,在点击软件商城上,搜索宝塔一键部署安装8)输入数据库的用户名和密码,域名为公网ip9)最后我们的博客就全部搭建完成了三、阿里云ESC数据库部署1、ECS安装Sqlserver数据库备份:(1)先打开SQLServer依次展开sqlserver根目录,并打开数据库(2)选择要备份的数据库名,鼠标右键任务->选择备份。(3)点击添加,选择存放数据库备份文件的地址(4)在弹出对话框中,点击图示按钮,选择存放数据库备份文件的地址,文件名后缀名为.bak 点击确定。(5)点击选项,根据自己的需求进行备份设置,设置完成,点击确定,开始备份2、如何对 ECS Linux 系统中的 MySQL 进行备份导出:(1)如果您使用的是帮助中心的一键环境配置,那么 MySQL 的安装目录是 /alidata/server/mysql。如果您将 MySQL 安装到其他目录,您需要输入您MySQL完整的安装路径。单库备份您可以在服务器上执行如下命令:/alidata/server/mysql/bin/mysqldump -uroot -p密码 数据库名 > 备份名称.sqlmysqldump 默认不会导出事件表,执行此命令会出现警告 -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.(2)如果您需要导出 MySQL事件,您可以执行如下命令:/alidata/server/mysql/bin/mysqldump -uroot -p密码 --events --ignore-table=mysql.event 数据库名 > 备份名称.sql3、如何对 ECS Linux 系统中的 MySQL 进行备份导入:如果您需要导入备份的 .sql 文件,有两个命令方式:(注意:/root/备份名称.sql 为实际备份文件绝对路径)方式一:可以在 备份名称.sql 文件所在目录中执行如下命令:/alidata/server/mysql/bin/mysql -uroot -p密码 mysql < 备份名称.sql方式二:通过执行如下命令:/alidata/server/mysql/bin/mysql -uroot -p密码mysql>use 数据库;mysql>source /root/备份名称.sql;4、ESC数据库密码忘了怎么查看修改?以常用的mysqld数据库为例:首先vim /etc/my.cnf在[mysqld]下加入skip-grant-tables重启数据库service mysqld restart直接输入mysql 就可以登陆数据库输入use mysql;update user set password=password(重新设置的密码) where user=root;刷新设置flush privileges;退出quit;去掉my.cnf最开始加入的skip-grant-tables重启数据库service mysqld restart采用新密码登陆mysql -uroot -p新密码5、ECS安装Sqlserver数据库还原(1)先打开SQL Server 2005 依次展开sqlserver根目录,并打开数据库(2)选择要还原的数据库名,鼠标右键任务->选择还原->选择数据库(3)在弹出对话框中,选择源设备,点击后面的按钮,弹出指定备份对话框,点击添加按钮,选择.bak源文件,找到后,点击确定(4)选择选项,进行还原设置,勾选“覆盖现有数据”前面的小方框; 点击“还原为”后面的按钮,要还原该数据库的数据文件和日志文件(5)选定好要还原的数据文件和日志文件之后,点击“确定”按钮,完成数据库还原阿里云ECS云服务器2折起,优惠配置多选1,用户实名认证后可购买,每人限1单,第2单起恢复原价;活动配置升级为第四代云服务器,其中入门级配置采用突发性能型t5实例,性能均衡配置采用共享型和网络增强型实例,性价比更优。我们来看看这次阿里云的ecs云服务器2折活动有什么需要注意的:1、为什么还没有购买完成就不能继续买了?为保证活动公平性,优惠订单10分钟内未完成支付,将自动关闭,请下单后尽快支付;2、阿里云ECS云服务器2折起入口在哪里?1)您可以在阿里云最新活动页面的云计算基础服务里找到。(小编经验,一般打折促销都有集中在这里展示哦,所以经常光顾阿里云,应该到这个页面看看)2)也可以直接复制2折活动页面地址:http://promotion.aliyun.com/ntms/act/qwbk.html3、阿里云ECS云服务器2折可以买多个服务器吗?新老会员完成实名认证后均可购买,每个会员限购1单,新会员限购3台,老会员限购1台,限当前活动页的指定云服务器配置。4、阿里云ECS云服务器2折起的活动什么时候结束?目前得到的信息是,首购2折的活动是长期有效的哟。所以当你新注册为阿里云用户以后,不要着急直接下单,可以看看比如免费套餐,比如2折购服务器等活动。5、为什么购买阿里云ECS云服务器2折说已经买过了不让买?有可能是“同一用户判断”导致系统认为您已经买过了。同一用户是指:根据不同阿里云账号在注册、登录、使用中的关联信息,阿里云判断其实际为同一用户。关联信息举例:同一证件、同一手机号、同一支付账号、同一设备、同一地址等对于大多数小型或初期项目来说,我们可能常用的做法是先将web、数据库全部安装在一起,后期根据需要来看是否将数据库单独迁移分离。传统物理服务器可以这么多,云服务器也可以如此。以阿里云ecs云服务器为例,我们来看看在云服务器上搭建数据库的相关内容:1、如何将阿里云ECS服务器上的自建数据库做迁移?(1)DTS传输:ECS上的自建数据库到RDS/MongoDB/Redis/DRDS/PetaData/OceanBase的数据迁移,使用数据传输DTS服务即可轻松实现。(2)增量迁移:对于支持增量迁移的存储引擎,还可以使用DTS在ECS自建数据库不停服的情况下,将数据迁移到目标实例。(3)从本地数据库迁移:可以将自建库的数据导入到阿里云数据库上,实现业务平滑迁移。不同类型的云数据库,导入数据的方式也不尽相同,具体请根据实际场景选择对应的迁移案例。2、在ecs上有几种部署数据库的方式:(1)在ECS(Windows系统)上部署Oracle数据库(2)在ECS(Linux系统)上部署Oracle数据库(3)在ECS(Windows系统)上部署SQL Server数据库(4)在ECS(Linux系统)上部署MySQL数据库(5)在ECS(Windows系统)上部署MySQL数据库3、对于ecs+rds方式来说,ECS自建数据库如何与RDS实例间的数据实时同步?(1)通过 DTS 进行ECS上的自建数据库跟RDS实例间数据同步作业的配置;目前数据传输服务提供的实时同步功能支持的同步架构有限,:http://help.aliyun.com/document_detail/66731.html方式1: A->B 即两个实例之间的单向同步,即支持1对1的单向同步,要求实例 B 中同步的对象必须为只读,否则会导致同步链路异常,出现数据不一致的情况。方式2: A->B/C/D 即一对多的分发式同步架构.这个架构对目标 RDS for MySQL 实例个数没有限制,但是要求目标实例中的同步对象必须为只读,否则会导致同步链路异常,出现数据不一致的情况。方式3:B/C/D->A 即多对一的数据汇总架构对于这种多对一的同步架构,为了保证同步数据一致性,要求每条同步链路同步的对象不相同。方式4:A->B->C 即级联架构方式5: A->B->A 即实例A和实例B之间的双向同步架构(2)如果要配置RDS->ECS上的自建DB 的反向同步,只要调换下源跟目标实例的实例类型,其他配置类似。4、为什么需要在ECS上部署数据库:阿里云有提供相应的高可用数据库架构RDS,但由于RDS具有一定的限制条件,可能无法满足部分生产环境的要求,例如需要使用Oracle数据库、需要使用SQL Server报表服务等,在这种情况下,我们需要考虑在ECS上搭建数据库的方式。常用数据库包含以下三种:Oracle、MySQL、SQL Server四、阿里云共享型和计算型服务器的区别共享型服务器:阿里云共享型服务器采用非绑定CPU调度模式。每个vCPU会被随机分配到任何空闲CPU超线程上,不同实例vCPU会争抢物理CPU资源,并导致高负载时计算性能波动不稳定,有可用性SLA保证,但无性能SLA保证。与企业级实例相比,共享型实例在资源利用上侧重于资源性能的共享,所以无法保证实例计算性能的稳定,但是成本更低。如ECS共享标准型S6实例等;计算型服务器(独享):阿里云计算型服务器属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。计算性能更加稳定。计算型服务器CPU内存比1:2,如计算型c6实例、c5实例等。
站长新手入门:从0开始搭建微信小程序商城,不会代码也能开商城(附带源码)
2020年全球疫情肆虐下,经济环境持续低迷,虽然国内已逐渐复苏,但线下消费仍然没法短期回到常态,所以今年开始直播电商、线上零售更加火爆。那么如果一个没有编程基础,或者说稍微懂一点技术的老板,要做小程序可以吗?那么今天跟着小A一起,从零开始搭建一个属于自己的小程序商城。(以下教程对完全的小白可能会有一定难度,如果阅读有问题可以反复研究)
小程序申请及认证
1、微信小程序申请;
进入微信公众平台,点击右上角的“立即注册”,账号类型选择“小程序”。按照官方引导,逐步完成小程序注册。由于小程序商城开发必须用到微信支付功能,所以在填写到“主体信息登记”时,注册方式选择“微信认证”通过微信认证验证主体身份,需支付300元认证费。这样将小程序申请和小程序认证同时操作,节省审核时间。
如之前有同一主体已认证的服务号,可以登录认证服务号,开通小程序,按照步骤填写信息提交即可。通过认证服务号开通的小程序无需再次进行小程序认证。
2、小程序信息完善;
完成注册后,微信小程序信息完善步骤和开发可同步进行。选择对公打款的用户,完成汇款验证后,可以补充小程序名称信息,上传小程序头像,填写小程序介绍并选择服务范围。
3、小程序申请支付
已认证的小程序可登录小程序,申请微信支付。
开发前准备
1、绑定开发者;
登录微信公众平台小程序,进入用户身份-开发者,新增绑定开发者。已认证的小程序最多可绑定20个开发者,40个体验者。
2、获取AppID
进入“设置-开发设置”,获取AppID信息。
上传发布
1、登录开发者工具;
前往微信官方开发者工具下载页面,根据自己的操作系统下载对应的安装包进行安装,有关开发者工具更详细的介绍可以查看《开发者工具介绍》。打开小程序开发者工具,用微信扫码登录开发者工具!
2、管理员扫码 -> 填写好小程序的项目目录、AppID(必须是客户已注册好的AppID)、项目名称。
3、配置合法域名(工具 -> 项目详情 -> 域名信息)
4、如果域名还没有配置,请前往微信公众平台 ,登录时填写客户的邮箱和密码(如果小程序内嵌了h5页面,还需要配置业务域名)
5、配置服务器信息,填写所需的服务器域名。
6、去到该小程序的后台管理系统,修改数据,手机预览小程序,检查后台数据跟小程序数据是否有误。
7、若无误,可上传代码,上传成功后,去到微信公众平台 -> 登录(客户的账号密码) -> 开发管理 ->提交审核。
服务器、域名
推荐使用Linux系统,不需要担心不会操作,直接用宝塔的控制面板,都是可视化的操作(下文也会提到宝塔的安装使用问题)
入门级配置
CPU:1核内存:1G实例规格:突发性能t5实例带宽:1M系统:CentOS 7.4 64位(推荐)价格:366元/年 933.3 元/三年
查看服务器详情
标准级配置
CPU:2核内存:4G实例规格:突发性能t5实例带宽:2M系统:CentOS 7.4 64位(推荐)价格:936元/年 2386.8 元/三年
查看服务器详情
域名的话,看各位喜好,如果没有PC商城需要,就按照最便宜的卖就好,也看不到域名路径,如果是有PC的话,还是推荐主流域名,如.com、.cn、.net…主要原因是对收录有帮助,选了一个小众的域名,可能短期内收录收到影响。
宝塔面板安装使用
1、连接服务器
MacBook系统连接服务器,直接SSH root@IP,windows的话可以用宝塔远程工具可以。
输入账号和密码,注意密码在输入时是不显示的,大家不要以为密码没输入。
2,安装宝塔面板
执行以下代码进行安装宝塔6.9免费版。宝塔6.9版本已经很稳定了,推荐大家直接安装6.9版本(注意:宝塔linux6.0版本是基于centos7开发的,务必使用centos7.x 系统)
yum install-y wget&&wget-Oinstall.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
Copy
如果大家系统是centos7以下的大家还是乖乖使用宝塔5.9的安装脚本(Centos官方已宣布在2020年停止对Centos6的维护更新,推荐大家装系统直接安装centos7)
yum install-y wget&&wget-Oinstall.sh http://download.bt.cn/install/install.sh && sh install.sh
Copy
回车进行安装。
输入y,并回车。接下来便是等待宝塔面板进行安装。
我们得到登录宝塔面板的URL,账号和密码。
面板地址:http://{您的服务器IP}:8888
初始化:第一次使用会要求初始化配置,请按照提示填入配置信息
安装完成宝塔面板后,我们就可以在浏览器中访问了。复制Bt-panel中的URL到浏览器上访问。注意要打开服务器上的8888端口
输入默认的账号和密码进行登录。
3,设置宝塔面板
登陆后进入宝塔面板我们可以看到如下图所示,你可以选择LNMP或者LAMP进行安装。看大家网站需要什么环境进行选择。如果是生产环境推荐大家使用编译安装,如果只是测试环境选择极速安装。两者的区别是编译安装慢但稳定,极速安装虽然慢但是没编译安装稳定。
推荐大家首次进入宝塔面板前不要进行环境的安装,因为在安装环境不能更改宝塔面板的设置。推荐大家先更改宝塔面板的默认设置,编译安装环境将近一个小时。在这段时间里我们先将宝塔面板设置好提高面板的安全性。
3.1,首先我们进入面板设置
3.2,更改面板端口
将端口更改为不常用的端口。
3.3,绑定域名
你可以绑定一个域名绑定完域名后只能通过你绑定的域名来访问面板。
3.4,绑定ip
如果你有固定的ip,你可绑定ip访问,绑定了ip访问你只能通过绑定得这个ip进行访问。如果你是家用电脑就不要绑定ip了,因为家用电脑的ip是动态的。这就会造成ip发生改变面板访问不了。
3.5,更改默认的面板用户和密码
更改宝塔安装完成时的默认用户名和密码,设置一个自己能记住的用户名和密码,密码不要太简单了。
3.5,绑定宝塔账号
如果你有宝塔账号你可以绑定下,没有的话可以去宝塔官网申请。宝塔账号在购买付费插件,开通专业版时要用到。点击前往注册宝塔账号,领取¥3188的宝塔面板礼包。
3.6,绑定微信小程序
由于微信小程序是付费插件,你只有购买了或者开通专业版才能使用。微信小程序能够监控服务器,方便用户随时查看服务器状态。
4,宝塔面板安全设置
在这里你可以开启和禁用一些端口。推荐大家更改ssh端口,和禁用ping。更改FTP端口。更改phpadmin默认端口。不常用的端口可以把它关闭,等要使用了在开启。
5,安装面板环境
在软件管理选择你所需要的网站环境进行安装。
在这里选择LNMP进行安装,即Linux+Nginx+Mysql+Php。
6,创建网站
等网站环境安装完成后便可以创建网站,有两种方法可以创建网站。第一种直接在选择网站,选择添加站点,进行创建网站。
第二种在软件管理中的宝塔插件中安装宝塔一键部署源码插件进行创建网站。
对于小程序建站,那么直接用第一种建站方式,然后把代码上传就可以。
代码上传准备工作差不多了,那么最后就是安装部署了,以下用来客推电商源码为例:
环境配置正常,最好是PHP5.6+Mysql5.5
win下面可以使用phpstudy集成环境部署安装
Linux下面可以使用宝塔部署安装
需要准备的东西
小程序appid:
AppSecret(小程序密钥) :
支付商户号:(微信支付未开通可以不要)
支付key:(微信支付未开通可以不要)
支付证书(微信支付未开通可以不要)
到官网下载开源版安装包 https://www.src1024.com/mini/wx/95.html
准备安装:
(一)把后台文件丢到环境根目录下,我的是直接放在根目录下的一个文件夹里,直接访问这个文件夹即可
(二)访问本地文件,安装一直下一步,配置环境要支持,不支持的自己百度一下,不然会安装失败,下面也给了几种环境不支持的修改方案
(三)自定义配置文件,报数据库连接失败的检查一下自己连接的数据库,及自己填写的信息是否正确(我连接的是本地的,我数据库没有密码)
(四)安装成功的标志
(五)安装成功后登录后台添加几条产品包括产品分类,品牌,商品规格等
(六)在后台系统管理->系统设置里填写相对应的内容
小程序api域名和系统域名修改需正确,后面会影响小程序的接口调用及图片路径的显示
小程序域名:http://你的域名/后台目录名称/LKT/index.php?module=api
IP地址:你服务器的IP,如果是本地请填写127.0.0.1
系统域名:http://你的域名/后台目录名称
注意:如果你的系统后台目录直接是定向域名,则上面的http://你的域名/后台目录名称 直接换成 http://你的域名/即可,不需要加上目录名称
小程序id和小程序密钥填对,后面也会影响小程序的正常运行
(七)在系统管理->支付设置里填写相对应的内容。
不需要微信支付的可以跳过
(八)配置小程序,把小程序 的文件准备到目录下,微信开发者工具新建项目。AppID要换成自己的,不然会变成别的项目
(九)进入小程序第一件事就是修改接口路径,即utils/util.js的getUri方法里面路径!
例如现在访问后台的路径是:http://localhost/open/app/LKT/index.php,那么在utils/util.js 的getUri代码里面的路径应该改成:http://localhost/open/app/LKT/index.php?module=api&software_name=3&edition=1.0
例如现在访问后台的路径是:http://www.laiketui.com/LKT/index.php,那么在utils/util.js 的getUri代码里面的路径应该改成:http://www.laiketui.com/LKT/index.php?module=api&software_name=3&edition=1.0
function getUri(){
return 'http://localhost/open/app/LKT/index.php?module=api&software_name=3&edition=1.0'
}
(十)小程序及后台都安装完成了,刚进小程序页面就是这样啦!
总结:安装部署其实很简单,后面要做的就是运营,如果搭建这个小程序还是有问题的,可以直接找15205564163,免费帮忙部署。
飞天加速计划·高校学生在家实践 ECS云服务器使用攻略与体验
第一部分本人是一名大三的计科学生,就读于上海理工大学,在这学期的专业课《分布式计算》和《软件测试》中,老师都提出了使用云服务器完成实验的要求。租用云服务器的费用对学生来说也是一笔不小的支出,主要目前是用于学习使用频率也并不高,于是在专业课老师的推荐下,我了解到了阿里云ECS服务器与“飞天加速计划·高校学生在家实践”活动。第二部分阿里云ECS 的使用十分方便,领用服务器后可以在自己的控制台查看实例列表,显示你的服务器的状态和进行一些控制和设置。在概览中有一些常用功能的详细攻略,保姆级教程非常详细。我使用这个云服务器主要是要搭建一个discuz论坛用于软件测试课程的一些自动化性能测试的项目,使用了宝塔来进行搭建。除了系统自动生成的安全组,我还手动添加了80和8888端口,用于网站的访问。宝塔的安装我是Windows系统,使用powershell进入服务器控制台。首先ssh -V,检查是否有SSH连接工具这样就是有的,没有的话先用命令安装一下。然后就可以在阿里云控制台复制自己服务器的公网IP,进行登录,注意输入密码时是不显示的,不是卡了正常输入回车就行。出现welcome就是登陆成功了。下面就可以进行安装了,我是Centos所以使用的第一个命令。Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.shUbuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.shDebian安装脚本wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.shFedora安装脚本 wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh注意:必须为没装过其它环境如Apache/Nginx/php/MySQL的新系统。完成后它会显示一个外网面板地址和内网面板地址,进入外网面板地址输入他给的用户名密码就可以进入你的宝塔服务器控制台啦。在这里的软件商店可以轻松的搭建环境,都是可视化的界面。我安装了一些需要的程序,discuz需要MySQL5.7+和PHP7.2.5+注意,所以我这里后来又装了7.3版本,不过这个也很方便,再安装一个然后在网站界面切换一下PHP版本就可以了。购买了一个域名来访问我的网站,这里域名购买需要实名认证通过,通过后2-3天数据才能同步然后可以进行ICP备案,域名备案后才可被访问。还有域名管理处要设置一下解析这样才能通过域名访问你的服务器。第三部分通过这两天对于ECS服务器的使用,我大概了解了云服务器的使用方法,对于Linux系统也更熟悉了。之前对于使用云服务器一直是有一些畏惧心理在的,感觉操作一定很麻烦,很复杂所以自己之前的大创项目也没有进行云端数据库部分的部署。这次经历让我意识到其实使用云服务器并不是什么复杂的操作,很快就能上手而且网上的教程也很丰富,并且有一个云服务器真的很方便。后续将Discuz的论坛搭建完成后,我应该还会再试试把之前的项目数据库备份到云上试试。或许还可以试着搭建一个个人网站?总而言之,这次在家实践计划之后我对于阿里云ECS服务器的使用体验很好,应该会继续使用,希望未来可以深入学习相关的知识,充分的利用这些资源。
PHP 之session cookie
cookie和session有什么用? 常见的用法,比如在有些网站下载东西需要会员先登陆。http协议本身是无状态的,无法得知顾客是否已经登陆,怎么办呢?cookie和session就可以知道。再比如网上购物,用户身份认证,程序状态记录。购物车怎么知道顾客挑选过哪些商品呢?cookie和session也可以记录。总而言之,cookie和session就是能够记录顾客状态的技术,尽管二者属于不同的技术,但只要cookie能做到的,session也能做到!如果session和cookie一样安全的话,二者就没有并要同时存在了,只要cookie就好了,让客户端来分提服务器的负担,并且对于用户来说又是透明的。何乐而不为呢。
1. 什么是session?
Session的中文译名叫做“会话”,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
因此通过SESSION(cookie是另外一种解决办法)记录用户的有关信息,以供用户再次以此身份对web服务器提起请求时作确认。会话的发明使得一个用户在多个页面间切换时能够保存他的信息。网站编程人员都有这样的体会,每一页中的变量是不能在第三页中使用的(虽然form,url也可以实现,但这都是非常不理想的办法),而SESSION中注册的变量就可以作为全局变量使用了。SESSION的实现中采用COOKIE技术,SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE;在服务器端保存其他session变量,比如session_name等等。当用户请求服务器时也把session_id一起发送到服务器,通过session_id提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为什么SESSION有时会失效了。当客户端禁用COOKIE时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id将无法传递,此时SESSION失效。不过PHP5在linux/unix平台可以自动检查cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能。
a域名的网站,我登陆成功.怎样到b域名的网站,也能获得session?
在 www.a.com 上登陆后,去 www.b.com 的连接中带有 形如 http://www.b.com/xxxx.php?s=yyyyyyyyyy 的其中 yyyyyyyyyy 是在 www.a.com 中 session_id(); 的值,如果a,b在同一个服务器,直接读取文件。不在的话,b可以调用a的接口(a需要接口实现)
根据session文件获取session信息
Java代码
$sessionPath = session_save_path();
$sessionFile = $sessionPath . DS . 'sess_' . $sid;//sid是sessionid
if (file_exists($sessionFile) && (time() - filectime($sessionFile)) < $liftTime) {
$lock = new CacheLock($sid);
$lock->lock();
$content = file_get_contents($sessionFile);
$tempSession = $_SESSION;
$_SESSION = array();
session_decode($content); //成功回写$_SESSION
$result['info']['customer_id'] = $_SESSION['customer_gm']['id'];
$result['info']['customer_name'] = $_SESSION['customer_gm']['name'];
$result['info']['customer_email'] = $_SESSION['customer_gm']['email'];
$result['msg'] = '';
$result['success'] = 1;
$_SESSION = $tempSession;
$lock->unlock();
}
2. Session常见函数及用法?
● 注册SESSION变量:
PHP5使用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似。
Page1.php
Java代码
<?php
session_start(); //使用SESSION前必须调用该函数。
$_SESSION['passwd'] = 'mynameislikui';
$_SESSION['time'] = time();
echo '<br/><a href="page2.php">通过COOKIE传递SESSION</a>'; //如果客户端支持cookie,可通过该链接传递session到下一页。
Page2.php
Java代码
<?php
session_start();
echo $_SESSION['name']; //
echo $_SESSION['passwd']; //
echo date('Y m d H:i:s', $_SESSION['time']);
echo '<br /><a href="page1.php">返回山一页</a>';
?>
有两种方法传递一个会话 ID:
cookie cookie 更优化,但由于不总是可用
URL 参数 直接将会话 ID 嵌入到 URL 中间去。
● session_id
session_id() 用于设定或取得当前session_id。php5中既可以使用session_id(),也可以通过附加在url上的SID取得当前会话的session_id和session_name。如果session_id()有具体指定值的话,将取代当前的session_id值。使用该函数前必须启动会话:session_start();当我们使用session cookies时,如果指定了一个session_id()值,每次启动session_start()都会往客户端发送一个cookie值。不论当前session_id是否与指定值相等。session_id()如果没有指定值,则返回当前session_id();当前会话没有启动的话,则返回空字符串。
● 更改 session_id session_regenerate_id() 更改成功则返回true,失败则返回false。使用该函数可以为当前session更改session_id,但不改变当前session的其他信息。例如:
Java代码
<?php
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "原始 SessionID: $old_sessionid<br/>";
echo "新的 SessionID: $new_sessionid<br/>";
echo"<pre>";
print_r($_SESSION);
echo"</pre>";
?>
● session_name() 返回当前session的name或改变当前session的name。如果要改变当前session的name,必须在session_start()之前调用该函数。注意:session_name不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的session id.
session改名示例:
Java代码
<?php
$previous_name = session_name("WebsiteID");
echo "新的session名为: $previous_name<br/>";
?>
● 如何删除session?
下面是PHP官方关于删除session的案例:
Java代码
<?php
// 初始化session.
session_start();
/*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
$_SESSION = array();
/***删除sessin id.由于session默认是基于cookie的,所以使用setcookie删除包含session id的cookie.***/
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
// 最后彻底销毁session.
session_destroy();
?>
由此我们可以得出删除Session的步骤:
①session_start()
②$_SESSION=array()/unset($_SESSION['xxx'])
③session_destroy()
● SESSION安全:
会话模块不能保证存放在会话中的信息只能被创建该会话的用户看到。根据其存放的数据,还需要采取更多措施来主动保护会话的完整性。
评估会话中携带的数据并实施附加保护措施通常要付出代价,降低用户的方便程度。例如,如果要保护用户免于受简单的社交策略侵害(注:指在 URL 中显示的会话 ID 会被别人在电脑屏幕上看到,或被别的网站通过 HTTP Referer 得到等),则应该启用 session.use_only_cookies。此情形下,客户端必须无条件启用 cookie,否则会话就不工作。
有几种途径会将现有的会话 ID 泄露给第三方。泄露出的会话 ID 使第三方能够访问所有与指定 ID 相关联的资源。第一,URL 携带会话 ID。如果连接到外部站点,包含有会话 ID 的 URL 可能会被存在外部站点的 Referer 日志中。第二,较主动的攻击者可能会侦听网段的数据包。如果未加密,会话 ID 会以明文方式在网络中流过。对此的解决方式是在服务器上实施 SSL 并强制用户使用。
默认情况下,所有与特定会话相关的数据都被存储在由 INI 选项 session.save_path 指定的目录下的一个文件中(session文件的命名格式是:"sess_[PHPSESSID的值]"。每一个文件,里面保存了一个会话的session_encode数据)。对每个会话会建立一个文件(不论是否有数据与该会话相关)。这是由于每打开一个会话即建立一个文件,不论是否有数据写入到该文件中。注意由于和文件系统协同工作的限制,此行为有个副作用,有可能造成用户定制的会话处理器(例如用数据库)丢失了未存储数据的会话。
上面介绍函数下文将会用到,但还有一些有关session的函数也介绍一下:session_encode
函数功能:sesssion信息编码
函数原型:string session_encode(void);
返回值:字符串
功能说明:返回的字符串中包含全局变量中各变量的名称与值,形式如:a|s:12:"it is a test \";c|s:4:"lala"; a是变量名 s:12代表变量a的值"it is a test的长度是12 变量间用分号”;”分隔。session_decode
函数功能:sesssion信息解码
函数原型:boolean session_decode (string data)
返回值:布尔值
功能说明:这个函数可将session信息解码,成功则返回逻辑值true
PHP5不再使用session_id,而是把它变成一个常量SID,并保存在cookie中。如果客户端禁用了cookie,php会自动通过url自动传动传递SID,其条件是设置php.ini中的session.use_trans_sid = 1。此时即使客户端即使禁用了cookie也没关系了。
用 strip_tags() 来输出 SID 以避免 XSS 相关的攻击。
Session跨页传递问题:
session跨页传递需要考虑三种情况:
①客户端禁用了cookie。
②浏览器出现问题,暂时无法存取cookie
③php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
为什么会这样呢?下面解释一下原因:
Session文件分为两部分:session变量保存在服务器端(默认以文件方式存储session);而session id则以cookie形式保存在客户端。(注意:session默认是基于cookie的)。
当用户的浏览器向服务器提出请求时,同时发送包含session id的cookie(默认情况下)。服务器根据客户端提供的session id来得到用户的文件,即保存在服务器端的session变量值。事实上,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录。PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。
当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的:
其一:“php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”;
其二:运行PHP的服务器必须是unix/linux系统,windows不具备此项功能。
明白了以上的道理,我们就可以得出解决session跨页传递问题的三条途径:
1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
2、手动通过URL传值、隐藏表单传递session id。
3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。
Java代码
<?php
session_start();
$_SESSION['var1']="中华人民共和国";
$sn = session_id();
$url='<a href="s2.php?s='.$sn.'">下一页</a>';//客户端不支持cookie时,使用该办法传递session.
echo $url;
?>
s2.php
Java代码
<?php
session_id($_GET['s']);
session_start();
echo "传递的session变量var1的值为:".$_SESSION['var1'];
?>
二,什么cookie
cookie分为二种
1,以文件方式存在硬盘空间上的长期性的cookie
2,停留在浏览器所占内存中的临时性的cookie
浏览网站时,你会经常发现网站登录的地方,会有提示,问你是不是要记住自己的登录状态,像这种情况,登录时填写的一些信息会被以文件的方式存放在客户端的硬盘上。
当用户登录后,session会在cookie端产生一个session_id,这个session_id是存于浏览器所占用的内存当中。当你关闭浏览器后,session_id也要消失了。
cookie采用的是在客户端保持状态的方案,它是客户端的会话状态的一种储存机制。它 是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头信息向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文 件,或者本地内存中数据,它会自动将同一服务器的任何请求缚上这些cookies,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以 session机制借助于cookie机制来达到保存标识的目的,这样就可以解决HTTP协议无状态的缺陷。
Java代码
<?php
if ($_GET[out])
{ //注销cookie方法
setcookie('name', '');
setcookie('pwd', '');
echo "<script>location.href='cookie.php'</script>";
}
if ($_POST[uname] && $_POST[upwd]) { //cookie的配置
setcookie('name', $_POST[uname], time() + 3600);
setcookie('pwd', $_POST[upwd], time() + 3600);
//让它跳转一次进行刷新
echo "<script>location.href='cookie.php'</script>";
}
if ($_COOKIE[name] && $_COOKIE[pwd]) { //cookie的应用
echo '用户:' . $_COOKIE[name] . '<br>密码:' . $_COOKIE[pwd];
//写个超级链接注销cookie
echo "<br><br><a href='cookie.php?out=out'>注销cookie</a>";
} // else echo "cookie保存失败!";
else echo "请登录!!!";
?>
<form action='' method="post">
用户:<input type="text" name='uname' value=''><br><br>
密码:<input type="text" name='upwd'><br><br>
<input type="submit" name='sub' value='登录'>
</form>
二级域名共享cookies
我们通常在使用cookie的时候一般都只是局限在本站内使用,也就是只在一个域名下使用。
如我们要在www.xhbin.com下使用一个cookie的话 ,只要在这个站下面的文件中设置一个cookie就行了
但是如果我们要想实现在一级域名下设置的cookie,同时要在二级域名下使用的话那么该怎么做呢??
比如这样的情况:我们在一级域名是个网站如:www.xhbin.com,他的下面有个二级域名如:bbs.xhbin.com
我们要想实现在一级域名上登录后,保留这个cookie到二级域名上,也就是说,实现同步登录的效果,
那么我们该怎么设置这个cookie??其实很简单。
就拿刚刚那个域名(www.xhbin.com)来说,我们可以这样设置cookie:setcookie(“fangbinbin”,”mengfei”,time()+3600,”/”,”.xhbin.com”);
那么我们就可以在这www.xhbin.com 和bbs.xhbin.com下面直接使用(echo $_COOKIE['fangbinbin']; )就能够输出那个设置的cookie的值了
这样子就解决了那个同步登录的问题!!当然如果涉及到3个及其以上的域名,最好都有统一的登录界面和退出界面,如登录时统一POST到一级域名的登录页面。
再将这个Cookie的所涉及到的用户登录Session信息保存到Key-Value类型的缓存中,如memcached、 memcachedDB 等,尽量避免写文件或者DB降低IO,提供用户体验。session存cookie
session 的生命周期是有一次,但是不同的页面要用同一个session变量的话,就需要在不同的页面加上session_start(),不然你是在另一个页面用 不了session的,所以为了方便就用session_set_cookie_params把session变量存在cookie中就可以正常使用 session了 ,这样就不用在每个页面都要调用session_start()
Java代码
session_save_path($path);
session_set_cookie_params(0, '/', '.trip166.com');
session_start();
然后在firefox下web Developer 中的查看cookie看你的session 的id的作用域,如果为.trip166.com,则说明cookie有效,session_id 全域有效,不出意外,你能取得session。
cookie安全 cookiekey和浏览器挂钩
Php代码
$auth_key = md5($salt.$_SERVER['HTTP_USER_AGENT']);
然后加密解密$auth_key,判断当前的和cookie中的$auth_key
PHP - 利用P3P实现跨域
Java代码
<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", '124', time()+3600, "/", ".a.com");
?>
云上网站经典架构最佳实践
分享人:天裴 解决方案架构师正文:本文从两部分为大家介绍云上网站经典架构的最佳实践。Ÿ 最佳实践原理讲解Ÿ 最佳实践系统搭建一、最佳实践原理讲解1)云上网站经典架构最佳实践-场景描述在创业型公司或阿米巴模式经营的公司中,新项目发布初期存在较大的不确定性,既要考虑项目未来的扩展性,又要衡量项目的运营成本。因此需要在成本可控的前提下,快速部署云上业务系统,同时兼顾灵活性和扩展性。今天我们演示的是一个较为通用的架构,通过对架构的适当裁剪或扩充,可以应用在传统企业、游戏和零售等行业。在业务和系统发展的初期,业务模式相对简单,用户规模较小,这时简单的系统架构即可满足业务需求。比如将业务系统全部部署在一台服务器上(或者几台服务器做简单集群),另外一台服务器做数据库使用。但是随着业务的高速发展,用户规模快速增大,业务对系统灵活性的要求也越来越高。比如在线游戏,需要具备随用户数增长快速开服的能力,老的基础架构的局限性就逐渐凸显出来:Ÿ 运维成本高、系统混乱、统一运维难度大。随着功能模块的增加,开发人员可能来自不同的团队,出现问题恢复系统或数据难度大。Ÿ 用户体验差。单点数据库没有完善的容灾备份机制,宕机丢部分数据是影响客户体验的常见问题,并且宕机造成的业务中断是全局性的,用户影响比较大。Ÿ 后续系统改造难度大。随着业务的发展,单点数据量越来越大,随之而来的数据库重要性加强、查询效率变差、运维难度加大。现阶段架构未做任何规划,改造难度大,数据打通发挥价值的趋势也会倒逼系统架构的整体架构。那么系统架构该如何迭代演进呢?这个架构非常适合具有以下特征的场景:Ÿ 系统可以按地域等规则拆解成一个个独立小系统单元化部署。Ÿ 公司以项目为核心组建团队,项目核心系统的主要运维工作由开发兼任。Ÿ 成本优先,数据打通、数据安全、容灾这样的需求滞后考虑。2)云上网站经典架构最佳实践-推荐架构我们推荐的架构结合使用了多种阿里云产品,具有以下优势:Ÿ 系统分级。核心系统通过多产品组合SLB+ECS+RDS保障服务稳定可靠,分散业务节点在两个可用区实现跨区域容灾,业务节点单元化部署。Ÿ 灵活。可单元化的应用和数据库集中部署在一台ECS上,节省成本,各节点之间互不干扰,灵活增减业务节点。Ÿ 静态内容通过CDN加速。CDN通过私有Bucket回源,有效防止资源盗链。Ÿ SLB、ECS和RDS组成了核心服务集群。SLB:是阿里云提供全托管式在线负载均衡服务,通过流量分发来提升应用系统的服务能力,通过消除单点故障来提升应用系统的可用性,我们可以在SBL下添加多台ECS实例,当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的实例,将请求分发给正常运行的实例,保证应用系统仍能正常工作。SLB支持同城跨可用区容灾,30秒内实现自动切换。SLB已在各地域部署了多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内切换到另外一个备可用区恢复服务能力。当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。RDS:是一种稳定可靠、可弹性伸缩的在线数据库服务,支持MYSQL、SQLServer、PostgreSQL、MariaDB和PPAS引擎,具备容灾、备份、恢复、迁移等方面的全面解决方案。对比自建数据库,RDS开箱即用,高可用版采用一主一备的双机热备架构,适合80%以上的用户场景。主节点故障时,主备节点秒级完成切换,整个切换过程对应用透明。备节点故障时,RDS会自动新建备节点以保障高可用。根据需要,我们可以把备用节点和主节点部署在同一可用区,也可以部署在同城的另一可用区(我们也可以叫它同城双机房)。除了高可用版以外,RDS还提供了集群版,三节点企业版等更高级别的容灾能力,数据库的异地容灾,可以通过数据传输服务(DTS)实现主实例和异地灾备实例之间的实时同步。对象存储OSS是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。在此架构中,用来存储网站所需的静态资源。内容分发网络(CDN)是建立并覆盖在承载网上,由不同区域的服务器组成的分布式网络。阿里云CDN分担源站压力,避免网络拥塞,确保在不同区域、不同场景下加速网站内容的分发,提高资源访问速度。静态内容通过CDN加速,CDN通过OSS私有Bucket回源,有效防止资源盗链。对于可单元化的子系统,我们以游戏的区域服为例,把系统和数据库部署在一台ECS上,然后做成镜像。当需要开新服的时候,可以通过镜像迅速拉起服务。如果单台服务异常,也不会影响到其它区域的服务,当然对子系统也支持高可用的架构,这里不再赘述。3)云上网站经典架构最佳实践-资源部署我们今天要操作演示的是刚才推荐架构的一个简易实现,如图所示,我们在杭州可用区中SLB,绑定EIP来与公网通信,这里使用的EIP是阿里云弹性公网IP,是可以独立购买和持有的公网IP资源,相比传统的固定公网IP,EIP更加灵活,不再属于某个云资源,可随时随地与VPC类型的ECS、NAT网关、ENI网卡、SLB进行绑定和解耦,SLB下挂载两台ECS来模拟核心业务服务。一个RDS实例为核心业务系统提供数据库服务,我们把两台ECS、SLB主节点、RDS主库主在同一可用区,实际工作中可根据需要灵活选择多种高可用方案。在另外一个可用区,我们创建一台ECS模拟单元化的子系统,我们这里以游戏的区域服务器为例,最后部署CDN和OSS来做静态内容加速,演示中我们会部署整套架构的基础环境,不部署实际的业务系统。本最佳实践主要包含以下几个步骤:1、通过CADT部署资源2、配置业务系统ECS环境3、配置并验证SLB4、配置RDS并验证内网测试访问5、部署云上OSS和CDN环境6、部署区域服务器通过实践我会验证以下结果:1、ECS对外提供httpd服务。2、SLB高可用验证:一台ECS停服后,访问可被自动转发到可用服务器。3、两台应用服务器可以从内网访问RDS.4、CDN加速效果,通过浏览器对比测试图片的加载速度。5、通过镜像快速部署区域服务器。尽管验证的场景比较简单,但是我们的架构本身具有良好的可扩展性,可以根据情况调整,以匹配复杂的场景。比如引入更强大的高可用方案,做到同城或异地容灾。二、最佳实践系统搭建1)通过CADT部署资源登陆阿里云网站,搜索CADT,云架构设计工具CADT是一款为上云应用提供自助式云架构管理的产品,显著地降低云上管理的难度和时间成本,本产品提供丰富的预置模版,同时也支持自助拖拽方式定义云上架构,用户可以方便地对云上架构的成本部署、运维、回收进行全生命周期地管理。我们进入CADT控制台,我们已经为这个架构方案准备好了官方模版,大家可以对模版一键拉起所需要的阿里云资源。我们点击通地官方模版新建,搜索云上网站经典架构这个模版,点击基于方案新建。系统会基于模版生成架构图,从模版新建的架构图中需要手工填写ECS源密码和RDS帐号密码。我们双击ecs实例,填写管理员密码,三台ecs都要填好。双击ecs和rds的连接线,填写帐号和密码。两条连接线都要填写。oss名称是全区唯一的,使用一个没有重复的名字点,击右上角的保存。给应用起个名字,确认。保存成功后就可以开始部署了。首先验证资源,验证通过后,点击下一步价格清单。这时系统会自动生成评估报告,我们很方便地评估部署资源需要的成本。 我们详细看一下这个报告。里面详细地列出了费用的明细和总费用的架构图。点击下一步,部署清单,勾选服务条款,创建资源。资源根据类型,完成创建的时间也不相同,可能需要等待较长的时间,这时我们可以把窗口关掉,重新打开就可以了。现在可以看到资源已经部署成功了。2)配置业务系统ECS环境这里需要安装运行HTTP服务,确保可以通过80端口提供服务。回到阿里云的控制台,在这里搜索ECS,进入ECS控制台。我们可以通过实例页面里找到三台实例,有两台app001、app002、regionHZ001,这里是我们的核心应用系统。我们远程连接,登陆app001,我们需要输入管理员帐号的密码,确认。登陆成功后需要安装httpd。安装成功了,我们启动一下服务。确保80端口已被占用,我们的服务在正常运行。,接下来创建一个HTML文件,叫local.html写入这台服务器,这个服务器接下来会被验证slb高可用特性。需要运行的命令,我们从这里拷过来。粘贴到这里,我们点击回车,我们要验证一下文件的写入正常。当用户通过浏览器来访问这个文件的时候,就能看到究竟是哪一台服务器在给它提供服务,这样我们app001就配置好了。我们用同样的方式来配置app002,首先远程登陆,安装启动。这样,两台基础业务的环境就搭建完成。3)配置并验证SLB回到CADT控制台,点击刚才创建的slb,可以看到一台slb已经在运行当中。进入默认的服务组,这两台正在被监听的80端口的服务器是app001和002。我们拷贝slb,绑定弹性公网的IP地址,我们拷贝这个地址,绑定到这里备用。访问一下这个地址。然后是我们的文件名,现在可以看到是app001在为我们提供服务。由于我们在用CADT部署slb的时候,打开的会话保持,所以刷新几次,仍然是app001在为我们提供服务。下面我们模拟,当app001出现异常时,没办法提供服务,slb是否可以把请求分发给另一台正常运行的app002。我们重新回到app001,把app002关掉,看一下端口,80端口已经没有被监听了。我们回到浏览器刷新一下页面,可以看到我们的请求已经被app002响应,slb的高可用功能验证成功。现在再把app001的服务恢复,再把它的HTTP启动起来,看一下端口,80端口又被监听到了。4)配置RDS并验证内网测试访问回到CADT控制台,点击RDS实例。首先进入帐号的页面,看到数据库帐号appdb_admin已经被创建。进入数据库管理页面,创建一个新的数据库,名字叫appdb,字符集utf8,授权帐号就是我们刚才创建的帐号,帐号类型读写,点击创建。这样数据库就创建好了。我们回到基本信息页面,看一下数据库存的白名单,在这个应用里面,可以看到有两台服务器的私绑地址,这也是CADT帮我们完成添加的。回到基本信息,点击网络类型里面的查看连接详情。我们记录一下数据库的内网地址,点击拷贝。把它放到我们的文档中,以备后续使用。现在我们就可以去应用服务器上测试登陆了。我们先找到要运行的命令,把数据库的地址和密码修改一下,复制一下这个命令。我们接着回到app01,安装一下MySQL,安装好之后,运行我们拷贝的命令,命令运行成功,我们可以看到刚才运行的数据库appdb。我们重复同样的步骤验证app002对RDS数据库的访问,用同样的命令,可以看到访问成功,这样就验证了可以成功地访问RDS的数据库。5)配置云上OSS和CDN环境接下来将静态资源上传到oss并配置定义加速,回到CADT控制台,在资源列表中找到oss,点击进入。在文件管理页面上传文件,文件的ACL选择继承Bucket。这里Bucket在创建的时候,我们已经设置为私有的了,点击上传。上传成功。下面开启加速,这一步需要经过备案的域名,否则是没有办法开启加速的,演示使用的域名是已经备案成功的。回到阿里云控制台,我们搜索一下CDN,点击进入CDN控制台。在域名管理中点击添加域名。我们加速使用的域名是这个,这个域名是经过备案的。把域名添加到这里,业务类型是图片小文件,源站信息选oss域名,端口80,加速区域仅中国内地,点击下一步。加速域名添加完成,但是还需要给这个域名配置记录才可以使用,我们记录一下这个记录,把它粘到我们的文本里,以备后续使用,这个记录值放到这里。回到阿里云控制台,搜索一下dns。进入云解析dns控制台,找到已经备案的域名,点击解析设置。我们需要添加两条记录,一条A记录,一条CNAME,A记录是指向CNAME的公网地址。我们的主机名就叫bp010,复制一下SLB的公网地址。主机记录bp010,记录值是我们的公网地址,点击确认。接下来还要记录一条CNAME值,这个是我们加速域名的前半段。它的记录值就是CNAME加速的时候系统生成的一个CNAME记录值,复制。拷贝到这里,点击确认。添加成功后稍等几分钟,让记录生效,在等待生效的同时,我们先来整理一下目前我们记录的信息,这是slb的地址,叫做域名的A记录,还有备案的域名,在cdn中我们添加了加速域名,在oss中我们上传了测试图片,所以图片的地址就是我们的加速域名,是一个斜杠加图片地址。我们dnf已经生效了,我们云深度ping一下域名,是可以ping的通的。我们再ping一下另一个域名,好了,是可以ping的通的,这样dns就添加成功了。回到cdn控制台,看一下域名的状态为正常运行。下面设置oss私有Bucket的回源,来授权dns来访问我们的oss,在回源配置页面,我们找到oss私有Bucket的回源,把按钮打开,我们测试一下oss对象可以通过cdn正常访问。去拷贝一下图片地址。回到浏览器,去访问一下这个地址,我们可以看到图片可以正常访问。我们看一下cdn的加速效果,回到oss控制台,在文件管理页面这里,找到这个文件的临时url备用。复制这个文件的url,注意这是一个临时url,很快会失效,所以我们设置的步骤一定要快,我们把URL记录好。下面我们将分别在APP001、002上的这个目录下面去创建一个HTML文件,我们通过oss文件的临时url和cdn分别访问几次,来查看对象的载入速度。我们在最佳实践里拿到的代码里,修改一下,把实例中的的oss临时url替换掉。cdn访问方式的url也替换掉,这样我们需要的测试代码就已经准备好了。接着回到eca控制台,远程登陆app001,进入目录。复制一下目录里的代码。把文件拷贝过去,粘贴确认没有问题,导出。我们在002上重复同样的步骤。复制一下测试地址。打开浏览器,为了避免缓存影响,我们打开无痕窗口。开启一下开发者工具。打开Network的页面。访问一下测试地址,这是加载的时间和cdn加速加载的时间。我们多刷几次,就会发现cdn方式的速度会变得越来越快。这里因为缓存的原因变成0了,我们再打开一个新的窗口。同样再刷新一下这个地址,这个cdn加载速度变快了。6)部署区域服务器回到ecs控制台,找到CADT创建的区域服务器RegionHZ001。我们先记录一下它的公网IP留作备用,拷贝到我们的文本中。远程连接,登陆这台服务器。我们把应用系统和数据库安装在这台ecs上。我们打开已经准备好的sampleCode,下面这些就是我们要运行的命令,我们首先创建和进入安装目录,创建一个MySQL的server。下载rpm安装包,安装rpm包。看一下可以安装MySQL的yum源。 安装MySQL程序。安装成功,我们把服务器启动起来。服务器起来之后,我们需要初始化MySQL实例。点击回车,设置一下管理员帐号和密码,把密码输入在这里,删除测试用户,删除root用户的远程登陆权限,只允许本地登陆,删除测试数据库,接着刷新权限表,让新设置的root用户权限生效。接下来尝试一下从本地登陆一下这个数据库,输入密码,可以看到登陆成功,我们的MySQL server装好了。下面要安装配置一个PHPMyAdmin。创建一下安装目录,创建好之后进入目录。下载安装包,需要等待下载完成。安装一下所需要的依赖包,接着给PHP做一下升级,把这些命令是一次性地拷贝进来。可以同时执行,点击确认。下面安装PHPMyAdmin,在这之前要安装一个解压软件,如果已经装过可以跳过这个步骤,解压一下这个包。把解压下来的目录复制到指定目录。进到这个目录底下,在这个目录文件底下已经有一个配置文件,我们只需要用拷贝的命令改一下名字,谁都可以使用了。配置文件创建好以后还需要生成一个随机的字符串。运行这个命令,把生成好的字符串也拷贝一下。复制好之后贴到文档里。接着要编辑配置文件,把刚才生成的随机字符串拷贝过去。粘贴到这个位置,保存退出。去启动HTTP的服务。启动完查看一下端口,确认80端口已经被成功占用,服务器正常。这样我们区域服的基础环境就搭建好了。接下来登陆一下PHPMyAdmin,去验证我们的数据库管理功能,在浏览器中输入地址,可以看到这个页面。用root帐号登陆。登陆完我们去点一下information schema。可以看到数据库的信息就展示出来了,数据库就可以通过图形界面做管理和控制了。这个区域服务器可以复制到其它地区。 为了能够快速地开服,我们要对regionHZ001做系统镜像,新的镜像就可以通过这个服务器快速拉起了。在这个管理控制台中,我们需要先把001关掉。我们刷新一下,确认它关闭成功之后,就可以制作镜像了。点击更多,云盘和镜像,创建自定义镜像。设置一个镜像的名字,叫phpMyAdmin,点击创建。接着我们到镜像页面,去看一下我们新创建的镜像进展怎么样,可以看到在创建中,创建镜像需要较长的时间,我们再稍等一下。镜像制作完成之后,我们就可以通过镜像开启服务器了。购买一台同等配置的服务器,点击上一步,直到基础配置页面。选择自定义镜像,选择刚才我们创建的PHPMyAdmin。在系统配置页面。我们的密码使用预设的镜像密码,给它命名叫regionHZ002,确认订单,把实例创建出来,勾选服务协议,点击创建实例。先刷新一下,我们远程连接,登陆一下这台服务器。我们需要把MySQL和http都启动起来。看一下MySQL占用情况,80和3306都已经占用了。回到控制台,记录一下新的服务器公网IP地址。通过浏览器去访问一下,看这个页面是不是正常,页面能正常访问,用root帐号来登陆一下。可以看到新开的服务器也都是正常工作的。
一文搞懂传统单节点网站的 Serverless 上云
作者:陶宇航本文选自“Serverless 函数计算征集令”征文,后台回复“函数”了解详情背景什么是函数?刚刚考完数学没多久的我,脑里立马想到的是自变量、因变量、函数值,也就是 y=f(x)。当然,在计算机里,函数 function 往往指的是一段被定义好的代码程序,我们可以通过传参调用这个定义好的函数,实现我们所需要的功能。那么,今天的函数计算 FC 又是什么?云计算时代的当下,容器化技术与各种工具发展的 DevOps,已经把开发与运维的工作进行了新的统筹,开发人员在完成代码的编写后,无需考虑环境,直接提交到各种流水线就可以完成测试、开发、部署,项目构建微服务,由容器完成环境的封装。但是往往我们最终还是需要投入精力到业务上线的集群,是私有云环境还是公有云?是裸金属服务器还是云实例 ECS?是自购还是租用?当然,DevOps 的落地、服务器\集群的运维,这些都是需要投入大量的资源与精力,DevOps 是一条捷径,但不是唯一的出路。而函数计算 FC 的出现,带来了无服务 Serverless 的架构,让开发者在开发和部署的时候,不再有部署服务复杂的感觉。对服务器的无感化,可以使开发者真正的关注在自己的代码上。阿里云 Serverless 函数式极简编程可专注于业务创新,无采购和部署成本、提供监控报警等完备的可观测能力。阿里云函数计算 FC 是事件驱动的全托管计算服务,真正的无需去考虑服务器的运维管理,只需要完成开发的代码进行上传,函数计算会通过角色策略去规划计算资源,弹性的方式执行函数,最后高效的执行部署。优雅!Serverless 将会有那些适用场景?是个人?还是生产?那么这次我将部署两种不同方向的应用对 Serverless 进行测评!一、通知系统与 Webhook,Trigger 触发与 Chat 机器人。许多系统中涉及到的 push 类功能,例如邮件、短信、Webhook。当然 Webhook 的能力不只是信息通知,不过这里所指的通知功能必然是需要基础设施也就是服务器来支撑运行,如果将这些功能直接由 Serverless 来操作,我们便无需支付运维一台服务器,节省了大量的工作与费用。同样,我们可以利用 Serverless 事件驱动模型实现定时自动触发任务,自动签到自动发送。二、其次当然是 Web 类的应用。基于各类 Web 框架的应用部署,构建基于 Java、Python、PHP 等语言的站点,Serverless很容易实现如 wordpress 这样的博客应用的上线。配合其他云产品,Codeup、OSS、RDS 等,更能实现高可用高性能的 Web 应用,如官方提供的 Kod 云盘系统。Serverless 农产品电商网站上云改造这里我拿隔壁软件专业(俺是网络技术的)的一个大作业项目作为部署的案例。项目是非常简单并且功能单一的,但是也是非常经典的前后端分离项目,由于我开发不太会,项目具体技术就不献丑了。之前据说是有什么版权的,我就不放源代码了hhhh。在改造之前,我相信是很多中小型公司业务的经典 AllinOne 结构,把业务涉及到的所有服务中间件运行在一台服务器/虚拟机上,虽然现在看可能完完全全是实验室环境,但是实际看到的依然有很多项目是这么做的。坏处也不用多提,部署运维难、难以进行资源的扩容、后续改造复杂、性能差没有应用高可用技术等等。。。Serverless 的农产品电商平台上云,项目比较简单,规划就在同一地域了。主要是将前端 HTML 页面与后端 Jar 包运行分别由两个单独的 Serverless 函数完成运行计算。其余支撑服务上云,分别用对应的云产品实现,这里 Redis 服务由于我自己 ECS 上有运行 Redis 服务,就不再单独购买云数据库 Redis 版了,当然推荐使用阿里云的 Redis 云数据库产品。1. Serverless 服务创建进入函数计算控制台,选择【服务及函数】,点击【创建服务】输入创建服务的名称与描述,开启日志功能,点击确定,完成服务的创建服务创建完成后,进入【服务详情】,找到【网络配置】,点击【编辑】选择允许访问 VPC,选择自定义配置,选择 VPC、vSwitch、安全组,这里需要和后续其他支撑的云产品(数据库等)保持在同一 VPC 下。因此需要做好云上网络的规划,也要看一下产品是否在地域下有没有库存。2. 前端页面 Serverless 函数创建完成服务创建后,点击【创建函数】,进入函数的创建页面选择【使用自定义运行时平滑迁移 WebServer】,输入函数名称,选择运行环境为【Nginx】,上传前端 HTML 代码与 Nginx 的配置文件,选择监听端口为 80,即为原 Nginx 中间件的服务端口。完成函数创建后,进入到函数详情界面,可以在函数代码中对代码进行编辑修改,代码改动后需要点击部署代码重新上传。上述也提到了,这里需要将 Nginx 服务配置一同上传,其中需要拷贝一份/etc/nginx/mime.types 文件到当下目录,避免 mime 文件类型映射错误。这里放 Nginx 关键配置,根据自己的业务情况修改,注意配置中端口监听需要与函数创建监听端口保持一致,同时网页代码的路径设置为/codehttp {
include mime.types; #注意引入此文件
keepalive_timeout 900;
server {
listen 80;
server_name localhost;
location / {
root /code;
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /users {
proxy_pass http://serverless.后端函数访问地址.run;
#Nginx反代传给后端的函数,地址在后续后端函数创建完可以拷贝
}
location /items {
proxy_pass http://serverless.后端函数访问地址.run;
#Nginx反代传给后端的函数,地址在后续后端函数创建完可以拷贝
}可以在调用日志查询相关日志当函数触发运行,Serverless 将会根据访问请求自动起实例,在这里可以手动登陆实例,去进行中间件服务的日志、运行环境的一些查看与排错。3. 后端 Serverless 函数创建回到函数服务界面,再次点击【创建函数】,进入函数的创建页面选择【使用自定义运行时平滑迁移 WebServer】,输入函数名称,选择运行环境为【Java】,上传打包好的 Jar 包文件。根据具体业务修改【启动命令】与【监听端口】。我这里需要监听业务端口为 8080,并且需要在运行时传入数据库连接的参数,这里所配置的数据库源用户名密码连接地址,在后续的云数据库 RDS 中会进行相关设置。后端函数创建完成后进入函数详情界面,其余功能与上述前端函数相同,不再复述点击【触发器管理】,此处 HTTP 触发器提供了公网与内网访问地址,我们拷贝内网地址在前端中间件反代配置处填入此域名,实现访问前端触发后端函数4. 云数据库 RDS MySQL Serverless 创建与迁移导入原有 Allinone 架构中没有做到数据库服务的独立与高可用,在此次云化部署,我们将选用阿里云公测中的云数据库 Serverless 版本。RDS MySQL Serverless 提供了 CPU、内存的实时弹性能力,具有资源用量低、简单易用、弹性灵活和价格低廉等优点,合理优化使用成本,进一步降本增效。RDS MySQL Serverless 实例创建 进入云数据库 RDS 控制台,点击【创建实例】,开始创建实例的流程,在【基础资源】设置界面,选择 Serverless 版,其余根据实际进行选择Serverless RDS 创建时【实例配置】需要注意网络 VPC 的设置,要与 Serverless 服务所设定的 VPC 一致,实现内网数据互通。确定订单后,等待实例创建完成即可RDS 数据库用户设置 完成实例创建,选择管理实例。在左侧任务栏选择【账号管理】,点击【创建账号】创建数据库账户供电商平台后端进行连接。输入账户名、密码,选择为普通账户,点击确定完成用户创建RDS 业务数据库创建 选择左侧栏中【数据库管理】,选择【创建数据库】输入农产品电商业务所需的库名,并且授权账户给前一步设置的用户,点击创建完成库的设置。RDS 服务连接地址 我们的 Serverless 函数中所需要连接库的地址,在 RDS 实例中【数据库】连接处可以查到,不过需要提前设定白名单。我们将内网地址进行拷贝,并且也完成了连接用户、密码、库的配置,就可以配置到 Serverless 函数或者是后端代码中了RDS 业务数据库的导入恢复 数据库的上云关键是数据内容的迁移,这次部署的业务数据库很少又很小,因此使用简单的备份 SQL 脚本文件作为迁移的方式。MySQL/Mariadb 的数据导出有多种方式,可以根据实际需求进行备份导出,当然大型业务库有专用的备份迁移工具,这里不细说了。进入 DMS 数据管理服务,选择【数据库开发】,在【数据变更】下点击【数据导入】。根据具体备份方式导入数据库,我这里选择上传备份的 SQL 脚本,提交申请开始导入数据数据导入完成,数据迁移完成5. Redis 服务上云与静态资源 CDNRedis 服务上云,前文也提到了,这里 Redis 服务由于我自己 ECS 上有运行 Redis 服务,就不再单独购买云数据库 Redis 版了,ECS 也处于同一 VPC 之下,可以实现内网互通。当然推荐使用阿里云的 Redis 云数据库产品。静态资源的 CDN,包括 css\js\图片的加速,原有架构中已经存放在阿里的 CDN 服务上了,我这里就不多做改动了。6. 公网业务访问域名配置最后一步,用户最终访问的是前端 Serverless 函数,如同阿里云给出的提示,访问默认的公网地址不会做任何中间件解析,而是直接下载首页 HTML 静态文件,因此我们需要自己配置访问域名。回到函数计算控制台,选择【域名管理】,点击【添加自定义域名】输入自定的域名,配置路由,选择对应函数的服务名称、函数名称、版本号 LATEST(最新)将需要解析的 CNAME 值,拷贝拷贝 CNAME 记录值,点击【云解析 DNS 控制台】,进入解析设置,点击【添加记录】选择记录类型【CNAME】,输入主机头,填入拷贝的记录值,确认完成添加7. 农产品电商项目 Serverless 上云效果首页,访问效果,前端函数无误农产品详情页访问用户注册功能测试,数据库连接与写入无误RDS 中数据已成功写入用户登陆测试订单提交测试,后端函数无误使用 Serverless 应用模块快速构建 litemall 电商应用系统1. 基于官方模板创建应用Serverless 应用提供了大量的官方应用模板,我们可以根据给出的模板来修改自己的业务,因此熟悉模板的部署也很重要。进入到函数计算 FC 的控制台页面,点击【应用】,选择【通过模板创建应用】,选择【商城案例】通过详情查看部署模板的信息,以及查询源代码,点击立即创建可以快速体验 Serverless 应用的创建,本地部署可以通过 Serverless Devs 工具进行部署2. 对创建应用进行配置点击立即创建后,我们进行应用的初始化配置。部署类型有两种:1.通过第三方代码仓库部署,2.直接部署两者区别就是使用自己的仓库代码后续可以通过 push 更新项目发布,而直接部署需要手动配置。这里就可以看到,我们的交付触发也是以 Git 仓库 push 提交为主,每次提交会自动触发部署。如是自己配置应用,需要根据业务配置 s.yaml 文件,参考:https://www.serverless-devs.com/fc/yaml/readme这里我选择 gitee 仓库进行部署,但是需要进行仓库第三方应用的授权点击前往授权,跳转到 gitee 的站点进行 OAuth 授权请求,点击同意授权阿里用户在第一次使用 FC 函数计算时,需要对角色策略进行添加的,我这里已经使用过阿里云函数计算 FC 了,若提示需要添加策略,按照提示点击添加即可。其他高级配置,需要根据业务进行修改,这里注意地域的选定,后续的其他弹性资源都会在此地域下,我这里选择本地杭州。完成配置后点击创建,代码已经新建上传到我的 gitee 仓库了。这里提供的 s.yaml 可以作为配置的参考,后续根据所部署的业务去修改 yaml3. 应用部署上线应用创建完成,首次自动进行部署,这里部署状态可以看到正在部署查看部署日志,如果部署出现错误也可以从日志信息中查询报错。部署经历了前置环境、资源同步、资源检查、执行部署这四个步骤后,我们的电商应用就完成了部署首次部署完成,也是最新 latest 的一次部署版本,可以通过部署历史自由的进行回滚4. 访问部署上线的电商应用访问测试的域名,就可以看到我们上线的 litemall 电商系统,进入电商应用的后台管理litemall 电商系统是一个开源的前后端分离带微信小程序的电商系统,具有电商平台基础的会员管理、商城管理、商品管理、推广管理、系统管理、配置管理、统计报表。litemall 电商系统,需要配置最小开发环境有:MySQL、JDK1.8 或以上、Maven、Nodejs5. 更换业务域名访问同样,当我们正常上线了 FC 的业务时,Serverless 用的是默认访问地址阿里云函数计算 FC 上线提供的域名是以..fc.aliyuncs.com//proxy///[action?queries]为默认的,若是正常业务访问我们必然要修改访问的域名。进入到阿里云函数计算 FC 的首页,点击高级功能下的域名管理,这里可以看到我们上线电商应用时的默认域名已经路由信息我们选择添加自定义域名输入域名的名称,也就是购买备案的域名下的自定义二级域名点击路由配置,选择服务名称,这里是我们部署的电商系统 litemall,选择函数名称与版本拷贝公网 CNAME 地址,后续在 DNS 域名管理处添加解析进入到域名管理下,添加一条记录,记录类型选择 CNAME,输入主机记录,将刚刚拷贝的公网 CNAME 地址粘到记录值,点击添加即可回到阿里云函数计算 FC,在最后点击创建即可,回到主页看到我们新绑定的域名最后,拿手机访问我自定义配置的公网地址电商服务正常上线,公网地址正常访问主页商品的详情购买页面:最后Serverless 相对其他方案来说,也是非常容易上手并高效的技术方案。上面的部署测试,其实还有很多需要改进的地方,但是我想把案例的重点放在 Serverless 服务器无感化上,本人也使用过不少阿里云的技术产品,深知对底层基础设施运维难度。虽然这几个月学习生活比较繁忙,但是还是对社区的各种活动非常感兴趣,也想做一些更好的测试。这次的 Serverless 无论是对个人用户,还是企业用户。都是一种非常不错的选择,弹性资源与按需付费,更加节省资源与 Money,更加优雅!本文转载自:函数计算评测局征文博主——陶宇航原文链接:https://developer.aliyun.com/article/980852正式开幕!8 月 11 日 阿里云飞天技术峰会邀您一同探秘云原生最佳实践
SVN使用教程(基于SAE)
TortoiseSVN is an easy-to-use SCM / source control software for Microsoft Windows and possibly the best standalone Apache™ Subversion® client there is. It is implemented as a Windows shell extension, which makes it integrate seamlessly into the Windows explorer. Since it's not an integration for a specific IDE you can use it with whatever development tools you like.
相关资源
TortoiseSVN下载:http://tortoisesvn.net/downloads.html
Subversion中文站: http://www.subversion.org.cn/
登录SAE,访问 我的应用,单击“创建新应用”
填写二级域名,单击“创建应用”,这个域名就是您应用的访问地址
现在您可以关闭浏览器,以下操作将在您的本地计算机上进行(请确保SVN已经安装好)
进入您的本地工作目录,如 D:\SAE,单击鼠标右键,在弹出的菜单中选择“SVN Checkout”
在弹出页面中填写仓库路径即可,如: https://svn.sinaapp.com/myhello (其中 myhello 是您刚创建的应用名称)
单击“OK”开始同步,如果是第一次使用会弹出Authentication窗口进行身份验证,
username:注册SAE时填写的 安全邮箱(并非微博帐号)
password:注册SAE时填写的 安全密码(并非微博密码)
另外,如果您不希望每次使用都进行身份验证,可以勾选Save authentication复选框
身份验证成功后会将您的应用同步到本地工作目录中,创建以您应用命名的文件夹
接下来需要创建一个版本,在该文件夹中创建一个新的文件夹作为这个应用的版本(注意文件夹的名称就是应用的版本号,必须是正整数,如:1)
现在您可以使用您最擅长的编码工具(如:EditPlus、Dreamweaver等)在该文件夹下创建您的第一个页面,如 index.php,文件内容如下:
<?phpecho 'Hello World ';?>
创建完成后,右键单击该文件,在弹出的菜单中选择:TortoiseSVN > Add ,添加该文件
完成后,会在该文件左侧出现红色的“!”,右键单击该文件,在弹出的菜单中选择SVN Commit...,执行提交操作
在弹出的窗口的Message处填写更新的理由(必填项,不填写会导致上传失败)
上传成功后显示以下界面
现在,在浏览器中输入您的应用的地址,就可以马上访问了;本例地址为 http://myhello.sinaapp.com (其中 myhello 为您的应用名称)
Windows SVN
使用TortoiseSVN客户端
在Windows下推荐使用乌龟(Tortoise)SVN客户端。 TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库(即SAE中央SVN仓库),除了能记住文件和目录的每次修改以 外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。
下载安装
TortoiseSVN下载:http://tortoisesvn.net/downloads.html
又不是在linux下,安装就不多说了 :)
下面详细介绍使用TortoiseSVN向SAE部署代码。
创建本地工作目录
第一步,如图1,创建一个新文件夹作为本地工作目录(Working directory),可以使用应用名为文件夹名。如,为我的应用devcenter创建本地工作目录。
第二步,从SAE的SVN仓库检出(checkout)一个应用的全部版本代码,如图2,右键-->点击“SVN Checkout”
在弹出页面中填写仓库路径即可,这里是:https://svn.sinaapp.com/devcenter/,其它默认参数即可,如图3:
Reversion处,“HEAD revision”是指最新版,也可以指定Revision为任意一个版本。
点击“OK”,出现下载界面,如图4:
如果一切顺利,devcenter应用所有版本代码将会全部出现在刚刚创建的devcenter文件夹下,如图5:
修改代码
在本地使用你喜欢的编辑器,编辑任意文件,保存后该文件图标将会出现红色感叹号,如图6所示:
看,刚刚修改过的index.php变色了。下面需要提交(commit)最近的更新。在index.php文件上击右键,出现菜单 ,选择“SVN commit”,如图7:
然后填写关于本次更新的日志(log message),这是必填项,否则commit会失败。如图8:
当您看到如图9所示,表明刚才的修改已经成功提交,并且前该devcenter项目的SVN版本号加1,变成30.
新增文件/文件夹
在 SVN工作目录下,对于文件修改,完成后只需要commit就ok了,但对于新增文件,或者从其它目录复制进来的文件或文件夹,需要在commit之前需 要做一步add操作,即将文件或文件夹添加到svn工作目录中来,否则SVN客户端不认它。具体操作很简单,如图10:
然后再如图7所示,右键commit即可。
更多Tortoise SVN使用帮助,请参阅:http://www.subversion.org.cn/tsvndoc/
Notepad++集成svn插件
Notepad++ 是一款Windows环境下很受欢迎的免费开源的代码编辑器,有很丰富的第三方插件。
下面介绍Notepad++的svn插件的安装及使用。
如图12,点击Plugin --> Plugin Manager --> Show Plugin Manager
打开后,在“Available”页找到“Subversion”,然后点击“Install”,如图13所示:
安装成功后会在Plugins菜单下出现"Subversion"子菜单。
打开之前checkout下来的任一文件,如devcenter/1/index.php,编辑完成后,点击Plugins --> Subversion --> Commit File(或使用快捷键Ctrl+Alt+A)
出现熟悉的一页,如图14所示:
对,这就是乌龟SVN的Commit页面,输入Log Message,点击“OK”即可提交。
Linux/Mac SVN
仓库地址
https://svn.sinaapp.com/appname/
为了传输安全,SAE要求统一使用https方式部署代码;
创建仓库
登陆SAE在线管理平台(http://sae.sina.com.cn),创建应用,成功后您即可以检出该应用代码。
例如,您刚刚创建了应用newapp,在本地执行:
svn checkout https://svn.sinaapp.com/newapp
第一次checkout时需要验证,用户名/密码为您的SAE安全邮箱和安全密码(非微博登陆账号密码)。
创建版本
假如,为newapp应用创建版本1
目前提供两种方式:
使用svn客户端
svn checkout https://svn.sinaapp.com/newapp #此处需要认证,用户名/密码为您的SAE安全邮箱和安全密码
cd newapp
mkdir 1
svn add 1
svn commit -m"add version 1 for newapp"
使用在线管理平台
在SAE在线管理平台“代码管理”处创建版本即可。但为了避免与本地仓库冲突,务必在本地工作目录下执行:svn update ,将最近的更新拉到本地来。
更新代码
更新代码前本地必须有一个工作目录(Working Directory),创建工作目录很简单,只需要检出(checkout)代码仓库即可。如,对于已经创建好的应用newapp,在本地执行:
svn checkout https://svn.sinaapp.com/newapp
输入安全账号和安全密码,即完成本地工作目录的创建。
上传代码
需要增加某个文件或文件夹,如部署wordpress到版本1。
svn checkout https://svn.sinaapp.com/newapp
cd newapp/1
cp -rf /path/to/wordpress/* ./
svn add ./*
svn commit -m"add wordpress"
修改代码
假如需要修改newapp应用版本1根目录下某个文件,如index.php,完整的操作流程如下:
svn checkout https://svn.sinaapp.com/newapp #如果已经checkout过了,不需要重新checkout。
cd newapp/1
vim index.php #这里编辑代码
svn commit -m "edit index.php"
配置应用(appconfig)
在应用版本根目录下,如newapp/1下,创建文件config.yaml(语法参见:http://sae.sina.com.cn/?m=devcenter&catId=193),然后通过svn commit即可完成应用配置。
如,现在需要更新应用newapp的默认版本3的appconfig,操作如下:
svn checkout https://svn.sinaapp.com/newapp #如果已经checkout过了,不需要重新checkout。
cd newapp/3
vim config.yaml #这里按照config.yaml语法编辑即可。
svn commit -m "update config.yaml"
注意:config.yaml不会被部署到用户的代码目录,但会被存储在服务端SVN仓库中。因此下次可以被checkout出来,但不会被用户访问到。
几款工具神器,高效率助你走上人生巅峰
一、背景
在我的工作和生活中,我一直都很注重效率工具的使用,这么些年下来也积累好几款很不错,但是又不为大多数人所熟知的软件工具,我用起来得心应手,很不错。那我就像在此给大家做个分享,希望你们都能多多提升工作效率。且本篇以后会进行不断更新,及时将好用的工具推荐给大家。希望能对大家有所帮助~
二、实用效率清单
1.WGestures
WGestures是一款非常好用的Windows系统全局鼠标手势工具软件,支持Windows 7+,免费、开源,可以方便的在全局或某些软件中自定义众多鼠标手势,也可以设置在某些软件中禁用该鼠标手势软件。这个对我来说非常好用,我关闭窗口、切换浏览器Tab、最小化、最大化窗口、刷新、关机等等都是使用这个鼠标手势来,再也不用去找窗口的功能按钮了,就是这么爽。还支持自己针对不同的软件来在这个工具上定制自己的鼠标手势,不能再爽一点了。软件打开截图如下:
在手势一栏里我们可以为自己需要的软件添加自定义的鼠标手势。还支持配置的导入导出等。我常用的鼠标手势有:
复制、粘贴、粘贴并回车、剪切、关闭、退出、强制退出、撤销、退格、删除、最小化、最大化、切换到桌面等。
一般来说一两天就可以适应了鼠标手势了。
官方网站:http://www.yingdev.com/projects/wgestures
github:https://github.com/yingDev/WGestures
2.Clover
Clover 是 Windows Explorer 资源管理器的一个扩展,为其增加类似谷歌 Chrome 浏览器的多标签页功能。也就是说Clover是一款Windows Explorer 资源管理器窗口标签化工具,打开电脑资源管理器可以像浏览器一样,将C、D、E盘标签化在一个窗口里面非常方便,不用再打开E盘后再返回退到D盘啦。
使用Clover以后,我们就不会再出现本地打开很多不同位置的资源管理器了,所有的资源管理器窗口都会被Clover像Chrome管理打开的各个标签一样来进行管理,你可以很方便的进行标签页的切换。而且还支持你添加本地文件的标签的功能,让你可以打开Clover以后一键进入目的资源位置。还支持双击空白处返回上一级目录等高级功能。我刚找到这款软件的时候,惊呆了,感觉牛逼的不要不要的。现在我看到同事谁的电脑上还打开一堆资源管理器,我就会不自觉的给他推荐这个,真的是好用~软件截图如下:
主观上来说,跟windows自带的资源管理器界面没有很大区别,但多了很多实用的功能,且更得心应手。
官方网站:http://cn.ejie.me/
百度下载地址:http://rj.baidu.com/soft/detail/17870.html?ald
3.Everything
Everything是速度最快的文件搜索软件。其速度之快令人震惊,百G硬盘几十万个文件,可以在几秒钟之内完成索引;文件名搜索瞬间呈现结果。它小巧免费,支持中文,支持正则表达式,可以通过HTTP或FTP分享搜索结果。如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,如果正在使用或放弃了Locate32,都值得推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything!
有了这款软件我们就可以不再忍受windows下资源管理器搜索慢如蜗牛的问题了。相信这款软件已经被很多牛人推荐过N多遍,今天我还是想再推荐一遍。^_^
软件截图如下:
官方网站:http://www.voidtools.com/
4.Xmarks
用户在使用浏览器的时候,不管是IE、Firefox、Safari或者是Chrome都会为用户提供一个书签的功能,用于将用户在互联网中浏览到的感兴趣的内容保存到浏览器中,但是由于这4款主流浏览器的开发者都不是一家公司,并且没有做一些兼容性的设置,用户在其中一个浏览器中保存了书签以后,没办法同步更新在另外一个浏览器中,虽然Chrome、Safari等浏览器都有从IE导入书签的功能,但这对于书签快的用户来说是远远不够的。
所以,能够同步更新多个浏览器中的书签的谷歌浏览器插件Xmarks 诞生了。Xmarks Bookmark Sync是一款可以把同步更新Chrome中的书签到IE、Firefox、Safari浏览器中的谷歌浏览器插件,在Chrome中安装了Xmarks Bookmark Sync插件以后,对于习惯使用多个浏览器的用户来说,在任意一个浏览器中使用Xmarks Bookmark Sync插件保存了书签,都可以快速同步到其他的浏览器,除此之外,Xmarks Bookmark Sync插件还会保证用户的书签保存在互联网上,这意味着用户就算换了一台电脑,使用Xmarks Bookmark Sync插件仍然可以快速地同步书签。
这简直就是一款神器!目前我所知道的是Xmarks已经有IE、Firefox、Safari、Chrome的插件了,你安装完插件后直接登陆你的Xmarks账号,就可以实现多个浏览器的同步,再也不会为不同浏览器书签不同步和害怕书签丢失的问题了。软件截图如下:
安装完chrome插件以后,我们通过如下操作就可以同步书签了
官方网站:http://www.xmarks.com/
5.Intellij IDEA
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java等少数语言。
程序猿的开发神器,我个人感觉比Eclipse智能太多了,再加上自己自定义的各种快捷键等操作,码代码简直爽翻。关于常用快捷键,请移步另一篇博客:IntelliJ IDEA 15.0.4常用快捷键整理
软件截图:
如果经济允许,建议购买正式版本,不允许的话,关于IDEA的破解,我后续单独放一篇博客专门说。
官方网站:https://www.jetbrains.com/
6.AdBlock Plus
Adblock Plus 是一款最为流行的广告拦截器,可以在 Firefox、Chrome、Opera、Safari、Android 和 Internet Explorer 上使用。屏蔽互联网上所有烦人的广告:去除 YouTube 上的视频广告、屏蔽 Facebook 广告、摆脱弹出窗口等等。在 Google Chrome 上,Adblock Plus 是增长最快的扩展之一。Adblock Plus在超过 1 亿台设备上运行。
有了它,我们再也不会受浏览器上各种牛皮癣广告的困扰了,还你一个干净清爽的浏览器,给搜索本来的体验!软件截图如下:
官方网站:https://adblockplus.org/
7.Markdown Here
Markdown Here插件支持你在任何富文本编辑器中将markdown预语法的文本转换成Markdown进行显示。这对微信公众号的排版来说极其有用,当你以Markdown预发写好文章以后,直接按快捷键Ctrl+Alt+M就可以一键转换成Markdown进行显示。谁用谁知道~
官方网站:http://markdown-here.com/
8.Team Viewer
TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案。为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可,而不需要进行安装(也可以选择安装,安装后可以设置开机运行)。该软件第一次启动在两台计算机上自动生成伙伴 ID。只需要输入你的伙伴的ID到TeamViewer,然后就会立即建立起连接。
当你需要用一台电脑远程连接另一台电脑的时候,它就派上用场了,比如我公司一台电脑,家里一台电脑,在公司的时候我希望能连接家里的电脑,获取家里电脑上的文件等信息,那我只需要打开家里电脑的TeamViewer,并设置为无人值守模式,那我就可以在公司很方
便的使用了。软件截图如下:
官方网站:https://www.teamviewer.com/zhCN/
9.Xmind
XMind 是一款非常实用的商业思维导图软件,应用全球最先进的Eclipse RCP 软件架构,全力打造易用、高效的可视化思维软件,强调软件的可扩展、跨平台、稳定性和性能,致力于使用先进的软件技术帮助用户真正意义上提高生产率。
工作中,我们使用Xmaind来制作思维导图,很简单,很方便,每个同学用的都喜欢~软件截图如下:
官方网站:http://www.xmindchina.net/
10.PostMan
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。
有了这款软件以后,我们就可以很方便的进行接口调试,而且这款软件还支持保存已经请求过的接口,这样我们做完一次服务端接口测试以后,下次就可以直接打开提示,参数什么的都可以帮你保存,简直调试接口神器。还有很多高深的用法等你来发掘~
软件截图如下:
官方网站:https://www.getpostman.com/apps
11.SwitchHosts
SwitchHosts是一个管理、快速切换Hosts小工具,开源软件,一键切换Hosts配置,非常实用,高效。开发Web过程中,部署有多套环境,网址域名都相同,部署在不同的服务器上,有开发环境、测试环境、预发布环境、生产环境。经常要切换Hosts来访问,测试以及验证bug,如果纯手工修改这会花掉不少时间,而且这个过程毫无乐趣可言。
可以很方便的修改本地hosts,不再需要你修改本地的hosts文件,退出以后本地hosts文件依旧是干净的。还支持你设置多套hosts环境,随意切换就好了,注意打开软件要使用管理员身份打开,否则不能修改成功!软件截图如下:
官方网站:https://github.com/oldj/SwitchHosts
12.JD-GUI
JD-GUI是一个独立图形界面的Java源代码“.class”文件反编译工具。您可以浏览重建的源代码,JD-GUI的即时访问方法和字段。实现了eclipse的高亮着色功能,多文件标签浏览.支持众多Java编译器的反编译,支持对整个Jar文件进行反编译,并本源代码可直接点击进行相关代码的跳转;
软件截图如下:
官方网站:http://jd.benow.ca/
三、总结
本次的软件推荐就先说到这里,以这些就是我平常经常使用到的效率提升工具,非常好用,我感觉每一款都是一个神器,都能帮我解决很头疼的问题,希望同样也可以帮助你,如果你有感觉很不错的软件,请不吝推荐给我,我把它归档到这里,如果你感觉本文不错,请点击推荐,博主码字不易,不喜勿喷~
原文发布时间为:2017-10-16
本文作者:佚名
本文来自云栖社区合作伙伴“51CTO”,了解相关信息可以关注。