# 微信云托管开发常识

当你进行前期开发测试,以及前后端联调前,可以先学习下面常识,有助于事半功倍。

# 一、客户端常识

  1. 小程序/公众号中CallContainer超时时间不得超过15s,请注意控制请求耗时。
  2. 如果你只是在小程序或者公众号中CallContainer调用,可关闭公网访问,杜绝 DDos 攻击。
  3. CallContainer请求大小限制100K,请求中不建议包含图片,可通过对象存储处理。
  4. 公网访问正常但小程序/公众号访问报错,优先检查代码中处理微信header/openid相关逻辑是否有问题。
  5. 小程序/公众号可使用CallContainer,无需域名,因此不需要在 mp 管理后台配置服务器域名,从而一开始就无需申请域名,也无需备案
  6. 小程序/公众号使用CallContainer,后端服务可以直接从http header中获取 openid 等信息。
  7. 微信云托管对公网域名不具备安全防护能力(包括默认公网域名和自定义域名),请谨慎使用。
  8. 默认公网域名性能有限制,仅能支持接口测试使用,请勿用于正式生产环境

# 二、服务端常识

  1. 设置最小副本为0时,需要注意半小时无请求服务将缩容到0,再次请求时将重启服务,扩容新的实例。
  2. 服务从0扩容到1(冷启动)耗时由服务启动速度决定,请尽可能优化服务启动性能。
  3. 如果你想彻底避免服务冷启动影响,请到「服务设置」中将「实例副本数」最小值设为1,但会持续产生资源消耗及费用,请结合业务自行权衡。
  4. 服务运行正常但偶现500报错,可能是容器规格设置过小(因业务逻辑较重连一个请求都无法稳定支撑),观察 CPU 和内存使用率是否过高进行判断。可尝试在「服务设置」中增大容器规格。
  5. 服务请求太慢时,适当增加容器规格有助于提升性能。
  6. 容器不支持持久化存储,请勿将图片、视频等文件直接存储在容器中,容器扩缩容/重启自愈时,这些写入的文件会被还原。请使用「对象存储」管理文件。
  7. 一个服务只能开启一个端口,多端口架构请拆分为多个服务。
  8. 微信云托管自带流量管理能力,无需额外配置负载均衡产品和组件。
  9. webshell仅用于查询信息和排查问题,通过 webshell 对容器的修改无法保留。
  10. 对代码的任何修改,都需要重新构建部署并发布,无法直接在已有版本上修改。
  11. 代码中请不要在请求处理程序范围之外启动后台线程或例程,并确保在传送响应之前完成所有异步操作。详情
  12. 请求小程序/公众号接口通过「云调用」能力,无需配置 ip 白名单。
  13. 因项目迁移无暇改造为云调用方式,请关闭“开放接口服务”开关,否则可能引发超时报错,因为“开放接口服务”开关开启时,默认将使用云调用方式。
  14. 云托管服务本身不具有固定的公网出口ip,而是动态变化的。
  15. 如果需要调用非小程序/公众号之外的其他平台方接口时,因其他平台方要求配置接口白名单需要固定 ip 的场景,后续我们将推出固定 ip 的增值付费服务,可单独购买。目前企业用户可在用户群联系我们,开通白名单体验。

# 三、扩缩容常识

  1. 扩缩容是自动根据流量改变实例的个数,而非改变实例的规格,每一个实例副都遵循「服务设置」中的实例规格。
  2. 自动扩缩容只根据 HTTP 请求流量判断,如果服务不接受外部请求,只是在自行跑定时任务,会被「误判」为没有使用,触发缩容。此种场景,请手动设定实例副本数最小值为1,保持常驻。

# 四、反馈技巧

保持良好的反馈习惯,有助于官方团队能快速定位并帮助你解决问题。

  1. 服务部署出现问题,请先自己查看日志,看里面的报错所在位置是构建阶段还是部署阶段。

  2. 如果是构建阶段,那大概率是你提供的代码包以及 dockerfile 描述有问题,请先自己在本地构建一下看是否可行,这一阶段的原因基本都是你自己代码造成的,不属于云托管的问题,请先自行排查解决,如果解决不了再进行反馈。

  3. 如果是部署阶段,并有相关建议的失败问题,请先参照失败建议进行排查;这一阶段一般是你的服务没有成功启动,直接挂掉了,一般是端口问题,如果连接数据库,检查一下是否是数据库联通问题导致启动失败。

  4. 如果上述无法解决你的问题,请通过控制台右上角「帮助」-「新建工单」,并直接复制部署页面的关键信息给我们。

  5. 有关于微信生态的各种接口报错,在反馈前请先阅读此文档,一般大部分的问题都有指导。