• 关于

    正常响应方式有什么用

    的搜索结果

问题

用fetch向后端发送post请求,为什么会产生两个请求(OPTIONS和POS?400报错

爱吃鱼的程序员 2020-06-03 17:08:53 2 浏览量 回答数 1

问题

健康检查常见问题

行者武松 2019-12-01 21:43:15 3573 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档添加解析记录云解析支持的记录类型:点击查看 A记录什么情况下会用到A记录? 答:如果需要将域名指向一个ip地址,就需要添加A记录 A记录的添加方式: 主机记录处填子域名 举例:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内。 记录类型选择“A”记录。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析;如希望实现智能解析效果,除了“默认”线路外,您可以根据访问者来源来指定不同的线路类型来实现智能访问。如果您对解析线路不理解,也可以点击右侧的小问号,会有对线路的含义说明。 记录值为ip地址,只可以填写IPv4地址。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 CNAME记录什么情况下会用到CNAME记录? 答:如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。最常用到CNAME的情况包括:CDN、OSS、WAF、高防IP域名。相同主机记录,可以添加多条CNAME域名,DNS查询时,轮询响应不同CNAME域名。 CNAME记录的添加方式: 主机记录处填子域名 说明:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内,“@”的CNAME会影响到MX记录的正常解析,添加时慎重考虑)。 记录类型选择“CNAME”记录 线路类型 说明:如果只有一个IP地址或CNAME域名,请务必选择“默认”,”默认”为必填项,否则会导致部分用户无法解析; 记录值为CNAME指向的域名。 说明:只可以填写域名,记录生成后会自动在域名后面补一个“.”,这是正常现象。 MX记录什么情况下会用到MX记录? 答:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录 MX记录的添加方式: 主机记录处填子域名 说明:一般情况下是要做xxx@123.com的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为xxx@mail.123.com 记录类型为MX。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可 记录值填写域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级的数值越低,优先级别就越高。 NS记录什么情况下会用到NS记录? 答:如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录 NS记录的添加方式: 主机记录处填子域名 说明:比如需要将www.123.com的解析授权给其他DNS服务器,只需要在主机记录处填写www即可,主机记录“@”不能做NS记录,授权出去的子域名不会影响其他子域名的正常解析 记录类型为NS。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析。 记录值为要授权的DNS服务器域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级不需要填写。 AAAA记录什么情况下会用到AAAA记录? 答:当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录 AAAA记录的添加方式: 主机记录处填子域名 说明:比如需要www.123.com,只需要在主机记录处填写www即可;如果只是想添加123.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内 记录类型为AAAA。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析 记录值为ip地址,只可以填写IPv6地址。 TTL默认为1分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 SRV记录什么情况下会用到SRV记录? 答:SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理 SRV记录的添加方式: 主机记录处格式为:服务的名字.协议的类型 格式为:服务的名字.协议的类型(例如:_example-server._tcp) 记录类型为SRV线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:优先级 权重 端口 主机名 例如:0 5 5060 sipserver.ccxcn.com.记录生成后会自动在域名后面补一个“.”,这是正常现象 MX优先级不需要填写 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录生效时间越快 CAA记录什么情况下会用到CAA记录? 答:CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。 CAA记录的添加方式: 主机记录: @ 记录类型为CAA 线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:[flag] [tag] [value] 举例: 0 issue “ca.example.net” 0 issuewild “example.com”0 iodef “mailto:admin@example.com” 格式说明: flag:认证机构限制标志,取值0或128;tag: 证书属性标签,取值:issue(CA授权任何类型的域名证书),issuewild(CA授权通配符域名证书),iodef(指定CA可报告策略违规)。value:证书颁发机构域名、策略违规报告邮件地址等信息; URL显性/隐性转发什么情况下会用到URL转发显性/隐性? 答:将一个域名指向另外一个已经存在的站点,就需要添加URL记录。 URL转发的添加方式: 以http://test.com 跳转到 http://www.aliyun.com:80/ 为例。 隐性转发: 用的是iframe框架技术,非重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,但地址栏显示当前地址http://test.com 显性转发: 用的是302重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,且地址栏显示目标地址http://www.aliyun.com:80/ 注意: URL转发时记录值不能为IP地址,且不支持泛解析设置。URL转发的目标域名不支持中文域名。 URL转发属于特殊商品,云解析不提供攻击防护服务,如遇攻击黑洞时无法使用URL转发,可以将需要转发的主机记录配置为A或CNAME记录。 根据工信部关于域名跳转服务的政策要求,URL转发功能目前只支持网站有备案号且接入商是万网的域名转发需求(转发前后的域名),网站无备案号或接入商不是万网的域名转发需求暂不支持。

2019-12-01 23:11:31 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

详细解答可以参考官方帮助文档添加解析记录云解析支持的记录类型:点击查看 A记录什么情况下会用到A记录? 答:如果需要将域名指向一个ip地址,就需要添加A记录 A记录的添加方式: 主机记录处填子域名 举例:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内。 记录类型选择“A”记录。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析;如希望实现智能解析效果,除了“默认”线路外,您可以根据访问者来源来指定不同的线路类型来实现智能访问。如果您对解析线路不理解,也可以点击右侧的小问号,会有对线路的含义说明。 记录值为ip地址,只可以填写IPv4地址。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 CNAME记录什么情况下会用到CNAME记录? 答:如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。最常用到CNAME的情况包括:CDN、OSS、WAF、高防IP域名。相同主机记录,可以添加多条CNAME域名,DNS查询时,轮询响应不同CNAME域名。 CNAME记录的添加方式: 主机记录处填子域名 说明:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内,“@”的CNAME会影响到MX记录的正常解析,添加时慎重考虑)。 记录类型选择“CNAME”记录 线路类型 说明:如果只有一个IP地址或CNAME域名,请务必选择“默认”,”默认”为必填项,否则会导致部分用户无法解析; 记录值为CNAME指向的域名。 说明:只可以填写域名,记录生成后会自动在域名后面补一个“.”,这是正常现象。 MX记录什么情况下会用到MX记录? 答:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录 MX记录的添加方式: 主机记录处填子域名 说明:一般情况下是要做xxx@123.com的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为xxx@mail.123.com 记录类型为MX。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可 记录值填写域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级的数值越低,优先级别就越高。 NS记录什么情况下会用到NS记录? 答:如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录 NS记录的添加方式: 主机记录处填子域名 说明:比如需要将www.123.com的解析授权给其他DNS服务器,只需要在主机记录处填写www即可,主机记录“@”不能做NS记录,授权出去的子域名不会影响其他子域名的正常解析 记录类型为NS。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析。 记录值为要授权的DNS服务器域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级不需要填写。 AAAA记录什么情况下会用到AAAA记录? 答:当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录 AAAA记录的添加方式: 主机记录处填子域名 说明:比如需要www.123.com,只需要在主机记录处填写www即可;如果只是想添加123.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内 记录类型为AAAA。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析 记录值为ip地址,只可以填写IPv6地址。 TTL默认为1分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 SRV记录什么情况下会用到SRV记录? 答:SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理 SRV记录的添加方式: 主机记录处格式为:服务的名字.协议的类型 格式为:服务的名字.协议的类型(例如:_example-server._tcp) 记录类型为SRV线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:优先级 权重 端口 主机名 例如:0 5 5060 sipserver.ccxcn.com.记录生成后会自动在域名后面补一个“.”,这是正常现象 MX优先级不需要填写 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录生效时间越快 CAA记录什么情况下会用到CAA记录? 答:CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。 CAA记录的添加方式: 主机记录: @ 记录类型为CAA 线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:[flag] [tag] [value] 举例: 0 issue “ca.example.net” 0 issuewild “example.com”0 iodef “mailto:admin@example.com” 格式说明: flag:认证机构限制标志,取值0或128;tag: 证书属性标签,取值:issue(CA授权任何类型的域名证书),issuewild(CA授权通配符域名证书),iodef(指定CA可报告策略违规)。value:证书颁发机构域名、策略违规报告邮件地址等信息; URL显性/隐性转发什么情况下会用到URL转发显性/隐性? 答:将一个域名指向另外一个已经存在的站点,就需要添加URL记录。 URL转发的添加方式: 以http://test.com 跳转到 http://www.aliyun.com:80/ 为例。 隐性转发: 用的是iframe框架技术,非重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,但地址栏显示当前地址http://test.com 显性转发: 用的是302重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,且地址栏显示目标地址http://www.aliyun.com:80/ 注意: URL转发时记录值不能为IP地址,且不支持泛解析设置。URL转发的目标域名不支持中文域名。 URL转发属于特殊商品,云解析不提供攻击防护服务,如遇攻击黑洞时无法使用URL转发,可以将需要转发的主机记录配置为A或CNAME记录。 根据工信部关于域名跳转服务的政策要求,URL转发功能目前只支持网站有备案号且接入商是万网的域名转发需求(转发前后的域名),网站无备案号或接入商不是万网的域名转发需求暂不支持。

2019-12-01 23:11:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档添加解析记录云解析支持的记录类型:点击查看 A记录什么情况下会用到A记录? 答:如果需要将域名指向一个ip地址,就需要添加A记录 A记录的添加方式: 主机记录处填子域名 举例:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内。 记录类型选择“A”记录。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析;如希望实现智能解析效果,除了“默认”线路外,您可以根据访问者来源来指定不同的线路类型来实现智能访问。如果您对解析线路不理解,也可以点击右侧的小问号,会有对线路的含义说明。 记录值为ip地址,只可以填写IPv4地址。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 CNAME记录什么情况下会用到CNAME记录? 答:如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。最常用到CNAME的情况包括:CDN、OSS、WAF、高防IP域名。相同主机记录,可以添加多条CNAME域名,DNS查询时,轮询响应不同CNAME域名。 CNAME记录的添加方式: 主机记录处填子域名 说明:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内,“@”的CNAME会影响到MX记录的正常解析,添加时慎重考虑)。 记录类型选择“CNAME”记录 线路类型 说明:如果只有一个IP地址或CNAME域名,请务必选择“默认”,”默认”为必填项,否则会导致部分用户无法解析; 记录值为CNAME指向的域名。 说明:只可以填写域名,记录生成后会自动在域名后面补一个“.”,这是正常现象。 MX记录什么情况下会用到MX记录? 答:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录 MX记录的添加方式: 主机记录处填子域名 说明:一般情况下是要做xxx@123.com的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为xxx@mail.123.com 记录类型为MX。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可 记录值填写域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级的数值越低,优先级别就越高。 NS记录什么情况下会用到NS记录? 答:如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录 NS记录的添加方式: 主机记录处填子域名 说明:比如需要将www.123.com的解析授权给其他DNS服务器,只需要在主机记录处填写www即可,主机记录“@”不能做NS记录,授权出去的子域名不会影响其他子域名的正常解析 记录类型为NS。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析。 记录值为要授权的DNS服务器域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级不需要填写。 AAAA记录什么情况下会用到AAAA记录? 答:当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录 AAAA记录的添加方式: 主机记录处填子域名 说明:比如需要www.123.com,只需要在主机记录处填写www即可;如果只是想添加123.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内 记录类型为AAAA。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析 记录值为ip地址,只可以填写IPv6地址。 TTL默认为1分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 SRV记录什么情况下会用到SRV记录? 答:SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理 SRV记录的添加方式: 主机记录处格式为:服务的名字.协议的类型 格式为:服务的名字.协议的类型(例如:_example-server._tcp) 记录类型为SRV线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:优先级 权重 端口 主机名 例如:0 5 5060 sipserver.ccxcn.com.记录生成后会自动在域名后面补一个“.”,这是正常现象 MX优先级不需要填写 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录生效时间越快 CAA记录什么情况下会用到CAA记录? 答:CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。 CAA记录的添加方式: 主机记录: @ 记录类型为CAA 线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:[flag] [tag] [value] 举例: 0 issue “ca.example.net” 0 issuewild “example.com”0 iodef “mailto:admin@example.com” 格式说明: flag:认证机构限制标志,取值0或128;tag: 证书属性标签,取值:issue(CA授权任何类型的域名证书),issuewild(CA授权通配符域名证书),iodef(指定CA可报告策略违规)。value:证书颁发机构域名、策略违规报告邮件地址等信息; URL显性/隐性转发什么情况下会用到URL转发显性/隐性? 答:将一个域名指向另外一个已经存在的站点,就需要添加URL记录。 URL转发的添加方式: 以http://test.com 跳转到 http://www.aliyun.com:80/ 为例。 隐性转发: 用的是iframe框架技术,非重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,但地址栏显示当前地址http://test.com 显性转发: 用的是302重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,且地址栏显示目标地址http://www.aliyun.com:80/ 注意: URL转发时记录值不能为IP地址,且不支持泛解析设置。URL转发的目标域名不支持中文域名。 URL转发属于特殊商品,云解析不提供攻击防护服务,如遇攻击黑洞时无法使用URL转发,可以将需要转发的主机记录配置为A或CNAME记录。 根据工信部关于域名跳转服务的政策要求,URL转发功能目前只支持网站有备案号且接入商是万网的域名转发需求(转发前后的域名),网站无备案号或接入商不是万网的域名转发需求暂不支持。

2019-12-01 23:11:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档添加解析记录云解析支持的记录类型:点击查看 A记录什么情况下会用到A记录? 答:如果需要将域名指向一个ip地址,就需要添加A记录 A记录的添加方式: 主机记录处填子域名 举例:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内。 记录类型选择“A”记录。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析;如希望实现智能解析效果,除了“默认”线路外,您可以根据访问者来源来指定不同的线路类型来实现智能访问。如果您对解析线路不理解,也可以点击右侧的小问号,会有对线路的含义说明。 记录值为ip地址,只可以填写IPv4地址。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 CNAME记录什么情况下会用到CNAME记录? 答:如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。最常用到CNAME的情况包括:CDN、OSS、WAF、高防IP域名。相同主机记录,可以添加多条CNAME域名,DNS查询时,轮询响应不同CNAME域名。 CNAME记录的添加方式: 主机记录处填子域名 说明:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内,“@”的CNAME会影响到MX记录的正常解析,添加时慎重考虑)。 记录类型选择“CNAME”记录 线路类型 说明:如果只有一个IP地址或CNAME域名,请务必选择“默认”,”默认”为必填项,否则会导致部分用户无法解析; 记录值为CNAME指向的域名。 说明:只可以填写域名,记录生成后会自动在域名后面补一个“.”,这是正常现象。 MX记录什么情况下会用到MX记录? 答:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录 MX记录的添加方式: 主机记录处填子域名 说明:一般情况下是要做xxx@123.com的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为xxx@mail.123.com 记录类型为MX。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可 记录值填写域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级的数值越低,优先级别就越高。 NS记录什么情况下会用到NS记录? 答:如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录 NS记录的添加方式: 主机记录处填子域名 说明:比如需要将www.123.com的解析授权给其他DNS服务器,只需要在主机记录处填写www即可,主机记录“@”不能做NS记录,授权出去的子域名不会影响其他子域名的正常解析 记录类型为NS。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析。 记录值为要授权的DNS服务器域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级不需要填写。 AAAA记录什么情况下会用到AAAA记录? 答:当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录 AAAA记录的添加方式: 主机记录处填子域名 说明:比如需要www.123.com,只需要在主机记录处填写www即可;如果只是想添加123.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内 记录类型为AAAA。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析 记录值为ip地址,只可以填写IPv6地址。 TTL默认为1分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 SRV记录什么情况下会用到SRV记录? 答:SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理 SRV记录的添加方式: 主机记录处格式为:服务的名字.协议的类型 格式为:服务的名字.协议的类型(例如:_example-server._tcp) 记录类型为SRV线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:优先级 权重 端口 主机名 例如:0 5 5060 sipserver.ccxcn.com.记录生成后会自动在域名后面补一个“.”,这是正常现象 MX优先级不需要填写 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录生效时间越快 CAA记录什么情况下会用到CAA记录? 答:CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。 CAA记录的添加方式: 主机记录: @ 记录类型为CAA 线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:[flag] [tag] [value] 举例: 0 issue “ca.example.net” 0 issuewild “example.com”0 iodef “mailto:admin@example.com” 格式说明: flag:认证机构限制标志,取值0或128;tag: 证书属性标签,取值:issue(CA授权任何类型的域名证书),issuewild(CA授权通配符域名证书),iodef(指定CA可报告策略违规)。value:证书颁发机构域名、策略违规报告邮件地址等信息; URL显性/隐性转发什么情况下会用到URL转发显性/隐性? 答:将一个域名指向另外一个已经存在的站点,就需要添加URL记录。 URL转发的添加方式: 以http://test.com 跳转到 http://www.aliyun.com:80/ 为例。 隐性转发: 用的是iframe框架技术,非重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,但地址栏显示当前地址http://test.com 显性转发: 用的是302重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,且地址栏显示目标地址http://www.aliyun.com:80/ 注意: URL转发时记录值不能为IP地址,且不支持泛解析设置。URL转发的目标域名不支持中文域名。 URL转发属于特殊商品,云解析不提供攻击防护服务,如遇攻击黑洞时无法使用URL转发,可以将需要转发的主机记录配置为A或CNAME记录。 根据工信部关于域名跳转服务的政策要求,URL转发功能目前只支持网站有备案号且接入商是万网的域名转发需求(转发前后的域名),网站无备案号或接入商不是万网的域名转发需求暂不支持。

2019-12-01 23:11:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档添加解析记录云解析支持的记录类型:点击查看 A记录什么情况下会用到A记录? 答:如果需要将域名指向一个ip地址,就需要添加A记录 A记录的添加方式: 主机记录处填子域名 举例:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内。 记录类型选择“A”记录。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析;如希望实现智能解析效果,除了“默认”线路外,您可以根据访问者来源来指定不同的线路类型来实现智能访问。如果您对解析线路不理解,也可以点击右侧的小问号,会有对线路的含义说明。 记录值为ip地址,只可以填写IPv4地址。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 CNAME记录什么情况下会用到CNAME记录? 答:如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。最常用到CNAME的情况包括:CDN、OSS、WAF、高防IP域名。相同主机记录,可以添加多条CNAME域名,DNS查询时,轮询响应不同CNAME域名。 CNAME记录的添加方式: 主机记录处填子域名 说明:域名为example.com,想通过www.example.com来实现域名访问,只需要在主机记录处填写www即可;如果想通过example.com来实现域名访问,可以主机记录直接留空,系统会自动填一个“@”到输入框内,“@”的CNAME会影响到MX记录的正常解析,添加时慎重考虑)。 记录类型选择“CNAME”记录 线路类型 说明:如果只有一个IP地址或CNAME域名,请务必选择“默认”,”默认”为必填项,否则会导致部分用户无法解析; 记录值为CNAME指向的域名。 说明:只可以填写域名,记录生成后会自动在域名后面补一个“.”,这是正常现象。 MX记录什么情况下会用到MX记录? 答:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录 MX记录的添加方式: 主机记录处填子域名 说明:一般情况下是要做xxx@123.com的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为xxx@mail.123.com 记录类型为MX。 线路类型 说明:“默认”为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可 记录值填写域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级的数值越低,优先级别就越高。 NS记录什么情况下会用到NS记录? 答:如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录 NS记录的添加方式: 主机记录处填子域名 说明:比如需要将www.123.com的解析授权给其他DNS服务器,只需要在主机记录处填写www即可,主机记录“@”不能做NS记录,授权出去的子域名不会影响其他子域名的正常解析 记录类型为NS。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析。 记录值为要授权的DNS服务器域名。 说明:记录生成后会自动在域名后面补一个“.”,这是正常现象。 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快 MX优先级不需要填写。 AAAA记录什么情况下会用到AAAA记录? 答:当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录 AAAA记录的添加方式: 主机记录处填子域名 说明:比如需要www.123.com,只需要在主机记录处填写www即可;如果只是想添加123.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内 记录类型为AAAA。 线路类型 说明:默认为必填项,否则会导致部分用户无法解析 记录值为ip地址,只可以填写IPv6地址。 TTL默认为1分钟 说明:TTL为缓存时间,数值越小,修改记录各地生效时间越快。 MX优先级不需要填写。 SRV记录什么情况下会用到SRV记录? 答:SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理 SRV记录的添加方式: 主机记录处格式为:服务的名字.协议的类型 格式为:服务的名字.协议的类型(例如:_example-server._tcp) 记录类型为SRV线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:优先级 权重 端口 主机名 例如:0 5 5060 sipserver.ccxcn.com.记录生成后会自动在域名后面补一个“.”,这是正常现象 MX优先级不需要填写 TTL默认为10分钟 说明:TTL为缓存时间,数值越小,修改记录生效时间越快 CAA记录什么情况下会用到CAA记录? 答:CAA(Certificate Authority Authorization),即证书颁发机构授权。是一项新的可以添加到DNS记录中的额外字段,通过DNS机制创建CAA资源记录,可以限定域名颁发的证书和CA(证书颁发机构)之间的联系。未经授权的第三方尝试通过其他CA注册获取用于该域名的SSL/TLS证书将被拒绝。 CAA记录的添加方式: 主机记录: @ 记录类型为CAA 线路类型(默认为必填项,否则会导致部分用户无法解析) 记录值格式为:[flag] [tag] [value] 举例: 0 issue “ca.example.net” 0 issuewild “example.com”0 iodef “mailto:admin@example.com” 格式说明: flag:认证机构限制标志,取值0或128;tag: 证书属性标签,取值:issue(CA授权任何类型的域名证书),issuewild(CA授权通配符域名证书),iodef(指定CA可报告策略违规)。value:证书颁发机构域名、策略违规报告邮件地址等信息; URL显性/隐性转发什么情况下会用到URL转发显性/隐性? 答:将一个域名指向另外一个已经存在的站点,就需要添加URL记录。 URL转发的添加方式: 以http://test.com 跳转到 http://www.aliyun.com:80/ 为例。 隐性转发: 用的是iframe框架技术,非重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,但地址栏显示当前地址http://test.com 显性转发: 用的是302重定向技术;效果为浏览器地址栏输入http://test.com 回车,打开网站内容是目标地址http://www.aliyun.com:80/ 的网站内容,且地址栏显示目标地址http://www.aliyun.com:80/ 注意: URL转发时记录值不能为IP地址,且不支持泛解析设置。URL转发的目标域名不支持中文域名。 URL转发属于特殊商品,云解析不提供攻击防护服务,如遇攻击黑洞时无法使用URL转发,可以将需要转发的主机记录配置为A或CNAME记录。 根据工信部关于域名跳转服务的政策要求,URL转发功能目前只支持网站有备案号且接入商是万网的域名转发需求(转发前后的域名),网站无备案号或接入商不是万网的域名转发需求暂不支持。

2019-12-01 23:11:31 0 浏览量 回答数 0

问题

使用java代码启动Tomcat成功后连接不上数据库的问题

落地花开啦 2019-12-01 19:28:02 2996 浏览量 回答数 1

问题

后端服务器ECS常见问题

行者武松 2019-12-01 21:43:14 3357 浏览量 回答数 0

回答

普通socket和websocket用不同的端口监听。######分开来实现了监听,但有时候连接上后马上就掉线了###### 你把类名字设置为WebSocketHandler,难道就实现WebSocket的功能了? 首先在你的WebSocketHandler中,重写方法 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception 判断msg的类型,第一次握手是Http协议,所以: // 判断Http msg instanceof FullHttpRequest // 判断WebSocket msg instanceof WebSocketFrame 如果是Http且能正确解码 ① 若Header里面含有Upgrade=websocket,则构造握手响应返回,就是你那个handshaker; ② 若不含有,则按照普通Http进行处理并响应 若解码失败,返回失败的Http响应即可######我做了你说的这几步,现在我把端口分开来监听了,但是有时候连接上马上就会进到channelInactive掉线,请问大概会是什么情况引起的?######服务器绑定不同的端口号###### 后端一个应用程序编写运行两个服务,一个socket,一个websocket,绑定不同的端口。   你也可以部署多个服务,以定位举例,把定位那块做成RPC服务,对外提供tcp socket接口,其它服务不管是socket、websocket、http,都用统一的RPC接口调用。######两个服务器之间怎么通信呢,这个还没搞过也###### 使用不同端口, 各自用自己的编解码类, 全局map存储 channel ,###### 我现在正在做这个功能,我的服务器用的是一个,在第一个Handler中通过读取第一条消息来区分是websocket还是普通的socket,如果是websocket的话,第一条消息就是一个http报文信息,如果是socket的话,第一条消息可以自定义。 这样就可以判断是什么方式连接,然后再动态的条件ChannelPipeline######答主您好,我现在遇到了同样的问题,能给个示例代码或参考博客吗?非常感谢###### 博主您好,请问这个问题您解决了吗?我遇到了同样的问题,如果您解决了,能否给个示例代码或参考博客,万分感谢!######我把server的代码贴下面了###### public class Server { public void run(int socketport,int websocketport) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1) EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (2) b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) // (3) .option(ChannelOption.SO_BACKLOG, 128) // (5) .childOption(ChannelOption.SO_KEEPALIVE, true); // (6) List<Integer> ports = new ArrayList(2); ports.add(socketport); ports.add(websocketport); Collection<Channel> channels = new ArrayList(ports.size()); for (int port : ports){ Channel serverChannel = null; if(port == 8081){ b.childHandler(new SimpleChatServerInitializer()); serverChannel = b.bind(port).sync().channel(); }else if (port == 8082){ b.childHandler(new WebSocketInitalizer()); serverChannel = b.bind(port).sync().channel(); } ((ArrayList) channels).add(serverChannel); } System.out.println("Server 启动了"); for (Channel ch : channels) { ch.closeFuture().sync(); } } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); System.out.println("Server 关闭了"); } } } 功能实现了,主要就是同时监听两个端口,socket和websocker 的handler还是正常写######感谢楼主。当时项目太忙,提问后两天没看到回复也就没回来看。后来找了一篇文章,按照文章的思路实现了一个端口同时接收两种连接。它是根据客户端连接的头部信息来区分连接类型,而不是根据端口来区分,比起你的方法更简洁一点。现在项目基本结束,我把实现的代码整理成博客:https://blog.csdn.net/NRlovestudy/article/details/93325965 。有需要的朋友可以参考下。###### 我的实现方式是这样的: 主要是判断连接上以后使用第一条消息来区分是websocket还是socket 然后是ClientControlHandler类 重点也就这么几行代码,可能再判断是否是websocket协议的时候不太严谨,楼主可以设计下判断的方式,参考HTTP解码器。 还有添加websocket解码器的时候需要调用一下channelRead方法,因为动态添加了处理器并不会立即执行。 decode方法是我写的一个简单的解码器:读取106个字符是因为我的业务中socket连接发来的验证码的时候正好是106个字符。 动态添加处理器的方法:

爱吃鱼的程序员 2020-06-04 17:47:17 0 浏览量 回答数 0

问题

Nginx性能为什么如此吊

小柒2012 2019-12-01 21:20:47 15038 浏览量 回答数 3

问题

性能测试:软件测试的重中之重

云效平台 2019-12-01 21:45:09 5839 浏览量 回答数 1

回答

先说结论: 不要对接!不要对接!不要对接! 开个玩笑,以上仅代表个人观点,大家也知道这种“三体式警告”根本没有用的,我自己也研究如何对接,说不定做完后就觉得“真香”了。 为什么要对接? 首先讨论一下为什么要把 Flutter 对接到 Web 生态。 Flutter 现在是一个炙手可热的跨平台技术,能够一套代码运行在 Android、iOS、PC、IoT 以及浏览器上,被认为是下一代跨平台技术。相比于 Weex 和 React Native 可以很好地解决多平台一致性问题,原生渲染性能相近,上层没有 JS 那么厚的封装层次,整体性能会略好一些。 但是大部分兴冲冲去学 Flutter 的人疑惑的第一个问题就是:为什么 Flutter 要用 Dart?一个全新的语言意味着新的学习成本,难道 JS 不香吗?JS 不香不是还有 TypeScript 吗!事实上 Flutter 抛弃的岂止是 JS 这门语言,也抛弃了 HTML 和 CSS,设计了一套解耦得更好的 Widget 体系,Flutter 抛弃的是整个 Web,致力于打造一个新的生态,但是这个生态无法复用 Web 生态的代码和解决方案。尤其是之前所有跨平台方案 Hybrid、React Native、Weex 都是对接 Web 生态的,这让 Flutter 显得有些格格不入,也让大部分前端开发者望而却步。 下面是我整理出来的,前端开发者使用 Flutter 的各方面成本: 因为 Flutter 的开发模式和前端框架比较像(可以说就是抄的 React),所以框架的学习成本并不高,稍微高一些的是 Dart 语言的学习成本,另外还要学习如何用 Widget 组装 UI,虽然很多布局 Widget 设计得和 CSS 很像,灵活度还是差了很多。要想在真实项目中用起来,还要改造整个工具链,以“Native First”的视角做开发,开发 Flutter 和开发原生应用的链路是比较像的,和开发前端页面有较大差异。最高的还是生态成本,前端生态的积累无论是代码还是技术方案都很难复用,这是最痛的一点,生态也是 Flutter 最弱的一环。 无论是为了先进的技术理念还是出于商业私心,先不管 Flutter 为什么抛弃 Web 生态,现实问题是最大的 UI 开发者群体是前端,最丰富的生态是 Web 生态,我觉得 Web 技术也是开发 UI 最高效的方式。如果能在上层使用 Web 技术栈开发,在底层使用 Flutter 实现跨平台渲染,不是可以很好的兼顾开发效率、性能和跨平台一致性吗?还能复用 Web 技术栈大量的技术积累。 可能这些理由也不够充分,暂且先照着这个假设继续分析,最后再重新讨论到底该不该对接。 关于 Flutter 和 Web 生态的对接涉及两个方面: 从 Web 到 Flutter。就是使用 Web 技术栈来开发,然后对接到 Flutter 上实现跨平台渲染。对 Web 来说是解决性能和跨平台一致性问题,对 Flutter 来说是解决生态复用问题。从 Flutter 到 Web。就是官方已经实现的 Web support for Flutter,把已经用 Dart 开发好的 App 编译成 HTML/JS/CSS 然后运行在浏览器上,可以用于降级和外投场景。 如何实现“从 Web 到 Flutter”? 首先分析一下 Flutter 的架构图,看看可以从哪里下手。 Flutter 可以分为 Framework 和 Engine 两部分,Engine 部分比较底层也比较稳定了,最好不要动,需要改的是用 Dart 实现的 Framework。要想对接 Web 生态的话,JS 引擎肯定是要引入的,至于是否保留 Dart VM 有待讨论。图中最上面 Material 和 Cupertino 两个 UI 库前端是不需要的,前端有自己的。关键是 Widget 这部分,是替换成 HTML/CSS 的方式写 UI,还是继续保留 Widget 但是把语言换成 JS,不同方案给出的解法也不一样。 有不少方案可以实现对接,业界有挺多尝试的,我总结了下面三种方式: - TS 魔改:用 JS 引擎替换掉 Dart VM,用 JS/TS 重新实现 Flutter Framework(或者直接 dart2js 编译过来)。 - JS 对接:引入 JS 引擎同时保留 Dart VM,用前端框架对接 Flutter Framework。 - C++ 魔改:用 JS 引擎替换掉 Dart VM,用 C++ 重新实现 Flutter Framework。 TS 魔改 TS 魔改就是完全抛弃掉 Dart VM,用 TypeScript 重新实现一遍用 Dart 写的 Flutter Framework。 为啥是 TS 而不是 JS?这不是因为 TS 是个大热门嘛,而且向下兼容 JS,现在几乎所有时髦的框架都要用 TS 重写了。 这种方案的出发点是“如果能把 Flutter 的 Dart 换成 JS 就好了”,最容易想到的路就是把 Dart 翻译成 TS,或者直接用 dart2js 把代码编译成 js,但是编译出来的代码包含很多 dart:ui 之类的库的封装,生成的包也挺大的,也比较难定制需要导出的接口,不如干脆用 TS 重写一遍,工具链更熟悉一些,还可以加一些定制。 理论上讲翻译之后 Flutter 绝大部分功能都依然支持,可以复用各种 npm 包,还可以动态化,但是丧失了 AOT 能力,JS 语言的执行性能应该是不如 Dart 的。而且所有节点的布局运算都发生在 JS,底层只需要提供基础的图形能力就好了,就好像是基于 Canvas API 写了一套 UI 框架,性能未必有现存前端框架的性能高。 此外最大的问题是如何与官方 Flutter 保持一致,假如现在是从 v1.13 版本翻译过来的,以后官方升级到了 v1.15 要不要同步更新?这个过程没啥技术含量,而且需要持续投入,做起来比较恶心。 另外还需要考虑上层是用 Widget 的方式写 UI,还是用前端熟悉的 HTML+CSS。如果依然用 Widget 的话,那大部分前端组件还是用不了的,UI 还是得重写一遍。反正要重写的话,成本也没降下来,那就用 Dart 重写呗…… 直接用官方原版 Flutter 也避免每次更新都要翻译一遍 Dart 代码。所以既然选择了对接前端生态,那就要对接 CSS,不然就没有足够的价值。然而 CSS 和 Widget 的对接也是很繁琐的过程,而且存在完备性问题。 JS 对接 翻译代码的方式不够优雅,那就保留 Dart,把 JS/CSS 对接到 Widget 上面不就好了? 当然可以,这种方式是仅把 Flutter 当做了底层的渲染引擎,上层保持前端框架的写法,仅把渲染部分对接到 Flutter。现存的很多前端框架都把底层渲染能力做了抽象,可以对接到不同渲染引擎上,如 Vue/Rax 同时支持浏览器和 Weex,用同样的方式,可以再支持一个 Flutter。 这种方式对前端框架的兼容性比较好,但是链路太长了,业务代码调用前端框架接口做渲染,一顿操作之后发出了渲染指令,这个渲染指令要基于通信的方式传给 Flutter Framework,这中间涉及一次 JS 到 C++ 再到 Dart 的跨语言转换,然后再接收到渲染指令之后还要转成相应的 Widget 树,从 CSS 到 Widget 的转换依然很繁琐。而且 Widget 本身是可以带有状态的,本身就是响应式更新的,在更新时会重新生成 widget 并 diff,如果在前端更新 UI 的话,前端框架在 js 里 diff 一次 vdom,传到 Flutter 之后又 diff 一次 widget。 如果要绕过 Widget 直接对接图中的 Rendering 这一层,可以绕过 widget diff 但是得改 Flutter Framework 的渲染链路,既然要改 Flutter Framework 那为什么不直接用 TS 魔改呢,还绕过了 JS 到 Dart 的通信,又回到了第一种方案。 总结来说,这个方案的优点是:实现简单、能最大化保留前端开发体验,缺点是:渲染链路长、通信成本高、响应式逻辑冲突、CSS 转 Widget 不完备等。 C++ 魔改 想要干掉 Dart VM,就需要用其他语言重新实现用 Dart 开发的 Framework,用 JS/TS 可以,用 C++ 当然可以,最硬核的方式就是用 C++ 重新实现 Flutter 的 Framework,然后接入 JS 引擎,通过 binding 把 C++ 接口透出到 JS 环境,上层应用还是用 JS 做开发。 把 Framework 层下沉到 C++ 之后,不仅会有更好的性能,也能支持更多语言。原本 Flutter Framework 是在 Dart VM 之上的,必须依赖 Dart VM 才能运行,所以对 Dart 有强依赖;用 C++ 重新实现之后,JS 引擎是在 C++ 版 Framework 之上的,框架本身并不依赖 JS 引擎,还可以对接其他各种语言,如对接了 JVM 之后可以支持 Java 和 Kotlin,对接回 Dart VM 可以继续支持 Dart。 这个方案可以增强性能,也能保持和 Flutter 的一致性,但是改造成本和维护成本都相当高。C++ 的开发效率肯定不如 Dart,当 Flutter 快速迭代之后如何跟进是很大的问题,如果跟进不及时或者实现不一致那很可能就分化了。从 CSS 到 Widget 的转换也是不得不面对的问题。 几种方案对比 把上面几种方案画在同一张图里是这个样子的: 图中实线部分表示了跨语言的通信,太过频繁会影响性能,虚线部分表示了其他对接可能性。 从下到上,Flutter Engine 是不需要动的,这一层是跨平台的关键。Framework 则有三种语言版本,JS/TS、Dart、C++,性能是 C++ 版本最好,成本是 Dart 版本最低。然后还需要向上处理 HTML/CSS 和 Widget 的问题,可以直接对接一个前端框架,也可以直接在 C++ 层实现(不然需要透出的 binding 接口就太多了,用通信的方式也太过频繁了)。 如何实现“从 Flutter 到 Web”? 这个功能官方已经实现了,可以把使用 Dart 开发的 App 编译成 Web App 运行在浏览器上,官方文档以介绍用法和 API 为主,我这里简单分析一下内部具体的实现方案。 实现原理 结合 Flutter 的架构图来看,要实现 Web 到 Flutter 需要改造的是上层 Framework,要实现 Flutter 到 Web 需要改造的则是底层 Engine。 Framework 对 Engine 的核心依赖是 dart:ui,这是库是在 Engine 里实现的,抽象出了绘制 UI 图层的接口,底层对接 skia 的实现,向上透出 Dart 语言的接口。这样来看,对接方式就比较简单了: 使用 dart2js 把 Framework 编译成 JS 代码。基于浏览器的 API 重新实现 dart:ui,即 dart:web_ui。 把 Dart 编译成 JS 没什么问题,性能可能会有一点影响,功能都是可以完全保留的,关键是 dart:web_ui 的实现。在原生 Engine 中,dart:ui 依赖 skia 透出的 SkCanvas 实现绘制,这是一套很底层的图形接口,只定义了画线、画多边形、贴图之类的底层能力,用浏览器接口实现这一套接口还是很有挑战的。上图可以看到 Web 版 Engine 是基于 DOM 和 Canvas 实现的,底层定义了 DomCanvas 和 BitmapCanvas 两种图形接口,会把传来的 layer tree 渲染成浏览器的 Element tree,但是节点上仅包含了 position, transform, opacity 之类的样式,只用到 CSS 很小的一个子集,一些更复杂的绘制直接用 2D canvas 实现。 存在的问题 我编译了一个还算复杂的 demo 试了一下,性能很不理想,滑动不流畅,有时候图片还会闪动。生成出来的 js 代码有 1.1MB (minify 之后,未 gzip),节点层次也比较深,我评估这个页面用前端写不会超过 300KB,节点数可以少一半以上。 另外再看一下 Flutter 仓库的 issue,过滤出 platfrom-web 相关的,可以看到大量:文字编辑失效、找不到光标、ListView 在 ios 上不可滚动、checkbox/button 行为不正常、安卓滚动卡顿图片闪烁、字体失效、某些机型视频无法播放、文字选中后无法复制、无法调试…… 感觉 flutter for web 已经陷入泥潭,让人回想起前端当年处理各种浏览器兼容性的噩梦。 这些性能和兼容性问题,核心原因是浏览器未暴露足够的底层能力,以及浏览器处理手势、用户输入和方式和 Flutter 差异巨大。 实现 Flutter Engine 需要的是底层的图形接口和系统能力,虽然canvas 提供了相似的图形接口,如果全部用 canvas 实现的话很难处理可访问性、文本选择、手势、表单等问题,也会存在很多兼容性问题。所以真实方案里用的是 Canvas + DOM 混合的方式,封装层次太高了,渲染链路太长。就好像 Flutter Framework 里进行了一顿猛如虎的操作之后,节点生成好了、布局算好了、绘制属性也处理好了,就差一个画布画出来了,然后交到浏览器手里,又生成一遍 Element,再算一遍布局,在处理一遍绘制,最终才交给了底层的图形库画出来。 再比如长页面的滚动,浏览器里只要一条 CSS (overflow:scroll) 就可以让元素可滚动,手势的监听以及页面的滚动以及滚动动画都是浏览器原生实现的,不需要与 JS 交互,甚至不需要重新 layout 和 paint,只需要 compositing。如上图所示,在 Flutter 中 Animation 和 Gesture 是用 Dart 实现的,编译过来就是 JS 实现的,浏览器本身并不知道这个元素是否可滚,只是不断派发 touchmove 事件,JS 根据事件属性计算节点偏移,然后运算动画,然后把 transform 或者新的 position 作用到节点上,然后浏览器再来一遍完整的渲染流程…… 优化方案 性能和兼容性的问题还是要解决的,短期内先把 issue 解掉,长线的优化方案,官方有两种尝试: 使用 CSS Painting API 做绘制。 a, 这是还处于提案状态的新标准,可以用 JS 实现一些绘制功能,自定义 CSS 属性。 b. 目前还未实现,需要等浏览器先把 CSS Houdini 支持好。 使用 WebAssembly 版本的 Skia 做绘制 https://skia.org/user/modules/canvaskit a, 这样可以发挥 wasm 的性能优势,并且保持 skia 功能的一致。但是目前 wasm 在浏览器环境里未必有性能优势,这里不展开讨论了。 b. 已经部分实现,参考这里的配置启用功能: https://github.com/flutter/flutter/issues/41062#issuecomment-533952994 这两个方案都是想更多的利用到浏览器的底层能力,只有浏览器暴露了更多底层能力,才能更好的实现 Flutter 的 Web Engine。不过这个要等挺久的时间,我们也参与不了,现阶段想要使用 flutter for web,还是得保持现有架构,一起参与进去把 issue 解决掉,优先保障功能,其次优化性能。 一种适应性更好的架构 如果理想化一点,能不能从架构角度让 Flutter 和 Web 生态融合的更好一些呢? 回顾文章最开始的官方架构图,上面是 Framework(Dart),下面是 Engine(C++),切分在 Foundation 这一层,双方之间的交互是几何图形信息。如果还保持这个架构,把切分层次划分的更靠上一些,如下图所示,划分在 Widgets 和 Rendering 这一层,理论上讲对 Flutter 的开发者来说是无感知的,因为上层的开发语言和 Widget 接口都是不变的。 切分在这一层,Framework 和 Engine 之间的交互就不再是几何图形而是节点信息,Widget 的组合、setState 响应式更新、Widget diff 都还在 Dart 中,展开后的 RenderObject 的布局、绘制、裁剪、动画全都在 C++ 中,不仅有更好的性能,还可以与 Engine 有更好的结合。 或者说,还原本保留 Engine 的设计,把下沉的这部分逻辑上划分成 Renderer,就有了如下三层的结构: 这样划分出来的每一层都有明确的定位: Framework: 开发框架。为开发者提供可编程 API,实现响应式的开发模式,提供细粒度 Widget 供开发者自由封装和组合。Renderer: 渲染引擎。专门实现布局、绘制、动画、手势的的处理,这部分功能相对独立,是可以与开发框架解耦的,也不必与特定语言绑定。Engine: 图形引擎。实现跨平台一致的图形接口,合成输入的层并绘制到屏幕上,处理好平台力的接入和适配。 这样切分除了有性能优势以外,也使得渲染引擎摆脱了对 Dart 的依赖,能够支持多种语言,也能支持多种开发模式。对接到 Dart VM 就可以用 Dart 写代码,对接到 JS 引擎就可以用 JS 写代码,对接到 JVM 还可以写 Java,但是无论怎么写,底层的渲染能力是一样的,一套统一的布局算法,动画和手势的处理行为也是一致的。 在这样的架构下,对接 Web 生态就更容易了。Dart 和 Widget 是前端不想要的,希望能换成 JS 和 CSS,但是又想要底层的跨平台一致渲染引擎,那从 Renderer 层开始对接就好了,绕过了所有不想要的,也保留了所有想要的。 要实现 Flutter for Web 也更简单了一些。在 Engine 层做对接,一直苦于浏览器透出的底层能力不够,如果是在 Renderer 之上做对接就更容易一些,基于 JS/CSS/DOM/Canvas 的能力封装出一套 Rendering 接口,供 Widget 调用就好了,这样可以使渲染链路更短一些,但是依然要处理 Widget 和 DOM/CSS 之间的兼容性问题。 再讨论一遍:为什么要对接? 技术上已经分析完了,要想搞定 Flutter 生态和 Web 生态的对接,需要投入很大的成本,所以真正决定做之前,要先讨论清楚为什么要做对接?到底要不要做对接? 首先 Google 官方对 Flutter 的定位就是个问题。Flutter 设计之初就是不考虑 Web 生态的,甚至在刻意回避,倡导的是更贴近原生的开发方式。我之所以在开头说不要对接,原因也很简单:两种技术设计理念不同,不是朝着一个方向发展的,生态不通,技术方案不通,强行融合很可能让彼此都丧失了优势。但是业界又有很多团队在做这种尝试,说明需求是存在的,如果 Google 抵制这个方向,那就不好做了。不过现在官方已经支持了 Flutter for Web,已经向 Web 生态迈了一步,未来是否进一步与 Web 融合,也是有可能的。 另外就是跨平台技术本身的问题,浏览器发展了二三十年,已经是个很强大的跨平台产品了,几乎是 Web 的代名词了,这一点无人能敌。但是也臃肿不堪,有大量历史包袱,性能和体验不够好,和 Native 的结合度差,尤其在移动和 IoT 平台。虽然硬件性能在不断提升,但这是所有软件共享的,浏览器的性能和体验总会比 Native 差一些,差的这一些很可能就是新业务和新场景的发挥空间。观察一下近几年新诞生的业务场景,很多都是利用到了 Native 新提供的能力才火爆起来的,如 AI/AR/ 视频 / 直播 等,有因为新的 Web API 而孵化生出来的商业模式吗? 原文链接: https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650405725&idx=1&sn=0b7476f7c7c01df7fdafda578f9ceb98&chksm=83953345b4e2ba53917ac30b709c07be15bd1c2fd5ae2a8ecfbb129b3813f771621b8fac95ca&scene=27#wechat_redirect

剑曼红尘 2020-03-10 09:54:40 0 浏览量 回答数 0

问题

电商网站的商品详情页系统架构【Java问答学堂】61期

剑曼红尘 2020-07-20 13:08:17 1 浏览量 回答数 1

问题

DDos分析二:黑客是如何组织一次DDoS攻击的?[续]

千鸟 2019-12-01 21:46:27 12810 浏览量 回答数 5

回答

2014年12月第2周 1)SLB植入cookie和SLB重写cookie有什么区别? cookie植入,表示直接由SLB系统来分配和管理对客户端进行的cookie植入操作,用户在进行配置时 需要指定会话保持的超时时间; cookie重写,表示SLB系统会根据用户自定义cookie名称来分配和管理对客户端进行的cookie植入操 作,便于用户识别和区分自定义的cookie名称 http://help.aliyun.com/doc/view/13510025.html?spm=0.0.0.0.vwbsGF 2)SLB有没有对外提供API接口,因为我想做到用程序自动去控制SLB的操作? SLB api您可以参考http://help.aliyun.com/view/13621674.html? spm=5176.7114037.1996646101.1.9RoTFM&pos=1 3)使用slb怎么实现数据的单向同步和双向同步? 单向同步可以使用rsync,双向同步的话rsync需要借用别的服务来实现,如unison+inotify。 4)slb的vip是否可以实现远程登录? slb 的vip无法实现远程登录。 5)slb的带宽是所有后端ECS服务器的带宽总和吗? 不是,使您购买的slb实例带宽。 6)slb健康检查机制是什么? 用户开启健康检查功能后,当后端某个ECS健康检查出现问题时会将请求转发到其他健康检查正常的 ECS上,而当该ECS恢复正常运行时,SLB会将其自动恢复到对外或对内的服务中。 针对7层(HTTP协议)服务,SLB系统的健康检查机制为:默认通过SLB的后端系统来向该ECS应用服务 器配置的缺省首页发起http head请求(缺省通过在服务监听配置中指定的后端ECS端口进行访问), 返回200 OK后将视为后端ECS运行正常,否则视为后端ECS运行异常。如果用户用来进行健康检查的页 面并不是应用服务器的缺省首页,那么需要用户指定相应的URI。如果用户对http head请求限定了 host字段的参数,那么需要用户指定相应的URL。用户也可以通过设定健康检查的频率、健康阈值和 不健康阈值来更好的控制健康检查功能。 针对4层(TCP协议)服务,SLB系统的健康检查机制为:默认通过在服务监听配置中指定的后端ECS端 口发起访问请求,如果端口访问正常则视为后端ECS运行正常,否则视为后端ECS运行异常。 当用户后端ECS健康检查异常后,SLB系统会将该ECS的转发权重设置为0,从而确保新的连接不会再被 转发到该ECS上,而已经建立的连接的请求却不会被直接断掉。 针对可能引起健康检查异常的排查思路点击这里查看。 关于健康检查的参数配置,提供如下参考建议: 响应超时时间:5秒 健康检查间隔:2秒 不健康阈值:3 健康阈值:3 7)权重设置为0怎么办? 权重为0的服务器将无法提供服务。 8)健康检查异常的排查思路? 参考http://help.aliyun.com/doc/view/13510029.html?spm=0.0.0.0.Oa9Ezv ------------------------- 12月份第3周1)轮询与最小连接数方式的区别是什么?当前SLB支持轮询和最小连接数2种模式的转发规则。“轮询模式”会将外部和内部的访问请求依序分发给后端ECS进行处理,而“最小连接数模式”会将外部和内部的访问请求分发给当前连接数最小的一台后端ECS进行处理。2)SLB支持redis的主备?目前我们的SLB不支持主备模式(冷备),只支持"轮询"和"最小连接数"两种负载模式。关于SLB的原理您可以参阅如下博文:http://blog.aliyun.com/149 基于ECS的redis搭建,您可以参阅论坛中其它用户的分享案例:http://bbs.aliyun.com/read/161389.html3)负载均衡的多台服务器之间文件会不会自动同步?slb是不会自动同步的,需要您自行配置。4)四层和七层检查的区别是什么?如果是4层(TCP)配置,健康检查只是简单的TCP握手,不会真正去访问您的业务。但对于7层(HTTP)配置,会发HTTP请求(类似于正常访问),并根据返回状态码判断服务状态(2XX表示服务正常)。5)我有多个slb,之前一个slb由于被攻击被黑洞给屏蔽了外部请求,是否可以在slb 并屏蔽后 能够自动将请求分发到另外的slb?由于攻击导致屏蔽外部请求的话,slb没有自动切换的方法的。6)目前slb是否可以设置黑名单?暂不支持。7)我的slb实例控制台显示是停止,为什么?需要给监听的端口设置带宽才能正常。  8)我使用了 SLB那么ESC 需要购买带宽吗?不需要的。但如需要管理ECS,则可购买少些的带宽如1M来管理。9)slb变更计费方式需要多久才能生效?变更和计费将在第二日零点后生效。10)私网SLB的使用,是如何收费的呢?私网slb是不收取费用的。 ------------------------- 12月第4周1)最近用slb后打开网页老出现503 和504错误?一般都是从ECS获取站点信息等异常导致的。您首先先确保源站都可以正常的访问。2)slb检查时突然发现SLB监听错误,怎么回事?配置的健康检查的域名为空,检查的路径是/index.html,目前查看服务器中只有站点c绑定了空主机头,且站点目录下有index.html,而此站点是停止状态,现已帮您启用,查看服务器的健康检查状态已经正常。3)我想使用slb搭建一个负载均衡,后端使用windows服务器,想咨询一下后端服务器是否需要进行什么特别配置呢?另外使用了slb后,后端还能否得到用户的真实IP地址呢,要不要进行什么特殊配置才可以得到后端用户的真实IP。后端服务器的操作系统和web环境最好保持一致,硬件配置上没有什么特别的,4层tcp是可以直接获得前端用户访问的真实地址的,7层http需要在后端web服务端设置一下,参考http://help.aliyun.com/view/13502961.html?spm=5176.7114037.1996646101.1.oRpnOM&pos=14)slb支持https吗?slb您可以通过TCP协议配置443端口的方式来实现,但是安全证书需要保存在您的后端ECS上。5)健康检查后续是否提供多个域名?健康检查只支持一个域名。6)我想关闭负载均衡的健康检查,请问如何配置?4层tcp是无法关闭健康检查的,7层http可以在控制台关闭。健康检查是不会消耗您服务器的资源的,因为slb都是通过内网ip来进行健康检查。7)如何在BLS上 限制单个IP 禁止访问 我的网站呢?SLB暂时不支持设置屏蔽用户端IP。 ------------------------- Re:Re负载均衡SLB常见咨询问题(持续连载) 引用第2楼517449116于2014-12-17 15:54发表的 Re负载均衡SLB常见咨询问题(持续连载) : 如果开启健康检查,健康检查异常的话,是不是就不会给这个异常的ECS分发? [url=http://bbs.aliyun.com/job.php?action=topost&tid=188736&pid=596806][/url] 异常的话不会在分发。 ------------------------- 2015年1月第1周1)有2台ECS起名叫A和B做SLB,A权重设的100 B权重设的0.请问.当A死机时,SLB是否会转到权重是0的B上?如果有一台设置为0,永远都不会有请求转发到此服务器上,即使权重100的宕机也不会转发到0权重的。2)会话保持的选择?开启会话保持功能后,SLB会把来自同一客户端的访问请求分发到同一台后端ECS上进行处理。针对7层(HTTP协议)服务,SLB系统是基于cookie的会话保持。针对4层(TCP协议)服务,SLB系统是基于IP地址的会话保持。3)用nagios或zabbix监控网络带宽,是否可以监控 slb的流量?nagios或zabbix,cacti是要要被监控端安装snmp或者相关agent ,slb不支持安装这些,所以无法通过这条监控软件进行监控。您可以在slb的控制台里面进行查看流量等相关信息。4)用了负载均衡后升级带宽,是不是只用在负载上面升级就可以了,ECS是不是不用在升级了?SLB与后端服务器是经过内网通信,所以如果业务量增加,您对SLB的带宽调整就行,不需要对服务器ECS进行带宽的升级。 ------------------------- 2015年1月第2周 1)SLB到期之后,会对SLB有关联的云主机怎么处理?云主机还没到期的前提下  我想把网站域名解析到SLB上 如果SLB到期了 会影响到我的网站服务么? 云服务器是不会有什么影响的,会自动又变成单独的云服务器可以供您使用的。但是如果您的域名是解析到SLB上,那么会影响到您的站点访问的。服务器上不会有其他的问题感谢您的支持。 2)当SLB 状态为停止的时候 还计算费用吗?停止后公网slb会收取实例费用。SLB价格总览参考:http://help.aliyun.com/view/11108234_13502923.html?spm=0.0.0.0.kBLsVA 3)做了SLB负载均衡,四层和7层负载均衡是否都走slb带宽? 都走slb带宽。 4)我想 移除 slb下的ecs(用作其他用途),请问在移除的时候是否会影响被负载到这台 ecs上的服务的使用 ,也是说slb这是是怎么处理的? 您可以将要移除的主机的权重更改为0 ,这样默认就不会在分发到权重为0的主机上,这个时候您可以移除该主机。但要确保您的另外一台服务器可以承受所有的访问。 5)SLB实例如何释放? 您需要登录管理控制台点击负载均衡。查询您之前创建的实例在哪个节点下,然后释放您的实例。 6)SLB按照小时的带宽计费, 是否需要每小时调整?比如我可否按照一个比较高的上限, 比如3G,然后每个小时按照该小时的峰值进行独立计费呢?   在一个自然日内,限制用户变更计费方式的次数为1次,变更计费方式将在第二日零点后生效;比如用户在今天5月5日的10:00提交了变更计费方式,那么该变配申请将在明天5月6日00:00后生效。http://help.aliyun.com/view/13502923.html?spm=5176.7114037.1996646101.3.67L5dm&pos=2;SLB目前最大带宽是1000Mbps 7)SLB可以限制每个ip的访问频率吗?(工单1F684MN)slb不支持这样配置的。 8)为什么我设置SLB健康检查间隔为5S,但却每秒都有很多请求?因为用于健康检查的服务ip不止一个,每秒中都会有不同的内网ip进行健康检查,健康检查是通过内网方式,不会消耗您后端服务器的资源,您可以将健康检查间隔阈值跳大些,这样监测频率会降低很多。 ------------------------- Re:负载均衡SLB常见咨询问题(持续连载至2015年1月第3周) 2015年1月第3周 1.发现很多100.97.0.0/16 的ip段扫描,给我服务器带来很大压力,怎么办? 100.97.0.0/16 是我们slb的健康检查服务ip段,如果给服务器带来较大压力,请调整健康检查的设置;健康检查的话 1)调低检查频率 2)设置检查静态文件,而不是默认首页或者动态文件 3)设置一个不记录日志的virtualhost,专门用于健康检查。 2)SLB里的带宽 和后面对应服务器的带宽有什么关联关系?比如SLB我设置了带宽为10M, 但是我后 面2台服务器购买的带宽都只有2M, 这种情况带宽以哪个为准? 如果您设置的是常规7层slb负载均衡,那么网站访问所使用的带宽,都将通过slb而不需要消耗云服 务器的带宽,但是云服务器本身的系统更新,以及您更新网站等等也是需要带宽的,因此您保留2M 即可。 3)采用流量计费方式的话带宽是否没有限制? SLB按流量计费最大的带宽是1G。 4)请问我如何获得一个外网SLB期所对应的内网IP呢?比如现在我有一个外网SLB下挂了一个ECS, 而ECS的iptables里我想做一些配置,针对来自于这个SLB的请求做一个判断,我需要知道这个外网 SLB的内网IP。 目前SLB与后端通过如下地址段进行交互: 10.158.0.0/16 10.159.0.0/16 100.97.0.0/16 您可以针对上述地址段做相关配置。 5)如何确保SLB后端的多台ECS之间的数据同步呢? 目前,有很多类似的工具可以实现服务器之间的数据同步,比如:rsync。具体使用及选择,还请通 过其他途径获得更多的介绍资料及指导信息。您也可以将您的ECS配置成无状态的应用服务器,而数 据和文件统一存放在RDS和OSS服务上。 ------------------------- 2015年1月第4周1.为什么我的SLB实例突然消失了?请检查您的SLB服务是否设置了自动释放时间导致。2.我想关掉负载均衡,怎么操作?您直接登录到阿里云管理控制台——slb负载均衡——实例中查询创建的slb服务,后方有“释放”的按钮,您直接释放即可。3. 我现在有两个阿里账号里面都有ECS,我能不能在一个slb里面配置不同阿里云账户下的ECS?目前只能将同一账户下的服务器添加到SLB中,无法跨账户添加。4.ECS做负载均衡需要用户做额外的配置吗?可以参考http://help.aliyun.com/knowledge_detail.htm?knowledgeId=5973987。5. 云服务器上做数据库负载均衡如何实现,需要购买什么产品 ?文件服务器能否做负载均衡,比如10台文件服务器,包括读写这种的  ?1)数据库集群,用slb理论上是可以做的,但是如果您需要集群级别的数据库,建议使用我们的RDS。2)文件服务器也可以负载均衡,使用slb在均衡,保持会话,但是有一个问题是后端文件同步的,需要您自行同步,如 rsync。6.看SLB的说明是支持ddos的防护的,请问下,SLB的防护的峰值是多少,超过峰值黑洞时间是多少?这个与slb所在地区有关,和ecs的防御阀值是一样的,黑洞时间也是2.5小时。7. slb第七层是基于haproxy还是nginx还是tengine实现的?使用tengine实现的。8.7层和4层 SLB的超时时间是多少?7层超时时间是60s,4层超时时间是900s。9.负载均衡健康检查请求数量太多,怎么回事?因为slb前端机器是一组机器,所以健康检查请求较多,请您不要担心,集群内的每台服务都会对您的健康按照您设定的频率去做健康检查:您可以按照上述方法去优化您的健康检查项,看似请求量很大,但是对您资源消耗很少的,有2个建议给您:1)扩大健康检查的频率2)将检查页面配置为静态页面。这样请求消耗的资源会节省。10. SLB配置中的最小连接数是基于什么样判断?SLB会自动判断 当前ECS 的established 来判断是否转发。 ------------------------- 2015年2月第1周1)我想了解下SLB按流量计费是不是每小时需要扣0.02元?按量付费,国内节点配置费用是按照0.02/小时。流量单独计费。按带宽计费:采取按小时计费,以日结算(运行未满一日,按照当日实际使用小时数*当日开通的最高带宽的天价格/24)。如果您使用SLB实例的时间不足一小时,按一小时收费。2)请问健康检查发的什么请求? head 还是 get?head请求。3)SLB最大连接数如何来设置?目前暂不支持设置最大连接数限制。4)SLB 后端有两个服务器HA1和HA2,为什么我将HA1的权重设置成0,SLB的健康检查就有告警呢?slb四层的话,只要权重设置为0,那么健康检查就是显示异常。 ------------------------- 2015年2月第3周1)负载均衡SLB的实例防攻击防御是多少?我们有云盾的防御黑洞策略,比如以杭州节点的slb,其最高防御的流量阈值为5G,当最大流量超过5G,您的slb vip则会被加入到黑洞中,触发黑洞会使ecs或者slb正常使用中断2.5小时,这个您可以通过云盾管理控制台查看到这个说明。2) 我其他机房的服务器能添加到你们的负载均衡SLB中吗?不可以的,slb使用的是内网和后端的ECS互联,无法直接添加非阿里云主机的服务器,且slb后端的ecs需要使用同一节点的主机。3)负载均衡服务支持的最大负载均衡实例数目多少?总体峰值可支持每秒新建链接数大约多少?SLB对于后端服务器的数目是没有限制的。对于总体峰值每秒新建连接数是没有限制的。但是因为SLB前端是云盾服务,所以最大值取决于云盾中您配置的请求数。您可以查看云盾看到具体的值。4)SLB按量计费为什么需要设置带宽峰值?如果不设置带宽峰值,遇到攻击等情况,可能流量打的非常高的,带宽流量峰值您可以在slb控制台设置。5)在SLB控制面板看到的流入流量,要比后端服务器的eth0的income流量小很多, 请问slb的流入流量是否应该等于后端服务器的内网网卡入流量吗?不等于的,后端的eth0包括了slb的流量,还有其他的流量,包括ecs直接的内网通信等。slb只做转发,不处理请求的,slb通过内网转发到ecs。6)SLB中的月账单 是指我们拥有所有的 SLB 实例的计费呢,还是单独的某个 SLB 的计费?月账单是指您不同类型产品,截止当前日期内月内消费计费额度的,是所有SLB产品的。您也可以通过账单明细进行查询具体信息的。 ------------------------- 2014年2月第4周1)10.159.63.55,这个内网ip,总是恶意访问我们网站?SLB系统除了会通过系统服务器的内网IP将来自外部的访问请求转到后端ECS上之外,还会对ECS进行健康检查(前提是您已经开启了这一功能)和对您的SLB服务进行可用性监控,这些访问的来源都是由SLB系统发起的,具体包含的IP地址段是:杭州、青岛、北京、深圳节点SLB系统IP地址段:10.159.0.0/16,10.158.0.0/16和100.97.0.0/16,为了确保您对外服务的可用性,请确保对上述地址的访问配置放行规则。2)slb计费方式变更需要多久,业务会受到影响么?变更计费方式与变更配置说明1、支持用户在按使用流量和按公网带宽2种计费方式间切换;2、支持按固定带宽方式计费的用户灵活变更带宽配置;3、在一个自然日内,限制用户变更计费方式的次数为1次,变更计费方式将在第二日零点后生效;比如:用户在今天5月5日的10:00提交了变更计费方式,那么该变配申请将在明天5月6日00:00后生效。4、按固定带宽方式计费变更带宽配置即时生效,带宽计费取自然日内用户开通的最高带宽。5、对客户业务不会造成影响;3)负载均衡能将我的外部非阿里云服务器和ECS服务器放到一块?目前负载均衡SLB仅支持阿里云ECS,无法支持外部非阿里云服务器。4)slb是否有连接数限制,需要大量终端一直与平台保持长连接,阿里云能提多少长连接?SLB没有并发连接数限制的,slb是转发请求不做处理,实际连接数还要跟您后端的处理能力有关。 ------------------------- 2015年3月第1周1)调整权重会对SLB已经有的正常连接有影响吗?目前调整权重会对调整权重的这台主机已有的连接产生影响,会有连接卡主,卡住时间由健康检查配置的时间决定。2)slb是否支持UDP协议?目前SLB暂不支持UDP协议。3)现在TCP四层负载均衡的出口带宽受ECS机器的出口带宽限制吗?slb和ECS之间走的是内网流量,带宽是不受限制的。4)如果没有外网ip, 是否可以用slb的4层转发 ?没有带宽4层SLB也是可以使用的。 ------------------------- Re:负载均衡SLB常见咨询问题(持续连载至2015年3月第1周) 2015年3月第2周 1)SLB变更计费方式并支付成功后无法添加配置? SLB在一个自然日内,限制用户变更计费方式的次数为1次,变更计费方式将在第二日零点后生效查看您今天变更过一 次计费方式,开始时间:2015-03-09 00:00:00。原按使用流量计费,在2015-03-09 00:00:00后变更为按固定带宽计 费,带宽峰值: 2Mbps。同时在您新的计费方式生效之前,您是无法对该SLB进行修改配置的。 2)我的账户怎么欠费¥7.88,这是怎么回事? 查看您有使用负载均衡slb业务,在slb产品的账单欠费,请您登陆用户中心-消费记录-账单明细中查看 记录。 3)如何屏蔽健康检查探测的日志记录? 关闭或者屏蔽对test.php访问日志的方式: 在站点配置文件中添加内容: location ~ /test.php { access_log off; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } 注: 1、对test.php的location必须要放置在对php|php5处理前,否则会因为先被进行全局匹配导致无法生效。 2、还可以用另一种方案实现: a、在后端服务器中单独为用于健康检查的页面建立一个站点; b、关闭这个站点的日志记录: location ~ .*\.(php|php5)?$ { access_log off; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } 3、如果检查页面是其他格式,比如test.html,可以采用如下方式进行屏蔽: location ~ /test.html { access_log off; } 4.我想问下SLB的固定带宽,10M是不是上行和下行最大都能达到10M? 固定带宽指的是下行带宽最大达到10M,上行带宽没有限制。上行带宽指的是SLB的入流量(上行),就是进入SLB的 流量。带宽指的是SLB的出流量(下行),就是SLB对外发生给客户端的流量。 5.一般配置SLB的时候有个权重0到100,是如何选择数值的? 权重需要您根据后端机器的配置进行选择比如AB两台机器性能一致就分别设置50,这样请求就会在这两台机器上轮询 ,不同权重决定请求分发的分配。 ------------------------- 2015年3月第3周1)公网的SLB和ECS之间的流量是否收费?不收费。2) 想做SLB+两台ECS,附件OSS,程序Discuz。但是不知道如何实现?slb要求后端的两台ecs数据是一致的,为了保持数据的一致性,建议共享存数和数据,静态文件放置到oss里,数据库文件走自己搭建的主从或者,连接同一台rds。3)按流量计算是否需要设置峰值?按流量计费不需要设置峰值的。4)如何建一个子帐号来管理负载均衡SLB?子账户无法管理负载均衡服务。

qilu 2019-12-02 01:15:34 0 浏览量 回答数 0

问题

使用HTTPDNS时该如何API访问

猫饭先生 2019-12-01 21:51:27 1353 浏览量 回答数 0

问题

Web测试方法

技术小菜鸟 2019-12-01 21:41:32 7022 浏览量 回答数 1

问题

【archsummit 回顾】阿里云章文嵩:构建大型云计算平台分布式技术的实践

云课堂 2019-12-01 21:03:36 14448 浏览量 回答数 9

问题

小试用,大学问菜鸟也要知道如何去试用之云服务器测评

universitylife 2019-12-01 21:15:34 33359 浏览量 回答数 19

问题

小试用,大学问菜鸟也要知道如何去试用之云服务器测评

universitylife 2019-12-01 21:31:33 15660 浏览量 回答数 10

问题

域名转入

yq传送门 2019-12-01 20:13:38 37209 浏览量 回答数 30

回答

更换服务器~100个是单服务器最大的负荷了你用的是镶嵌式的,要选择服务器机组的那种~刀片式服务器~然后oracl数据库支持分开安装。同步处理~ 你肯定买的是架式服务器~######装ORACLE服务器是刀片式的,6核至强 24G的内存 应该不是服务器瓶颈######oracl装在独立的一台服务器上的话,只支持小形企业和地、市级企业运行 你说的情况,可以理解你的数据量非常庞大,,有可能是省、国家级的数据量了~~ 让你单位给你单独开个服务器房间,更换服务器机柜然后购买刀片式服务器做服务器阵列机组~######数据量倒不会太大,一天1G不到,问题是很多存储过程的逻辑很复杂,一条线程调用存储过程,要等待很久才会返回,直接导致工作线程速度很慢,数据进入速度太快,工作异常状态频繁出现。######必须要实时的存入数据库吗?不能先缓存到服务器,然后让服务器慢慢去处理吗?或者直接将数据记入日志,然后sqlload?######回复 @xinzaibing : 我想到一个蛋疼的方式:数据写文件,文件内容定期入库,程序定期读取数据库计算的结果缓存到内存中。不知道你具体需求,瞎琢磨一个。######回复 @asdfsx : 公司领导一致认为内存不可靠,断电、程序异常什么的...存在内存的数据就没了...真是蛋疼啊######回复 @xinzaibing : 如果数据量不大的话,还有一个方案就是都保存在内存里,然后定时把内存里的结果同步到数据库里。数据库的逻辑挪到程序里..........这个方案比较累啊。另外就是缓存可以加个优先级高低的判断。######目前要求是必须要实时入库,采取写日志文件的方法也可以。 这些数据有一个特点,在某一个时刻会有一个突然出现的峰值,然后又慢慢变少,但是这个时间是不固定的,由于只实用了一条双缓冲队列,所有需要紧急处理的数据和非紧急处理的数据都在队列里,而如果遇到非紧急数据,处理了很长的时间,就直接导致后面的紧急数据失效了...或者导致嵌入式程序判断服务端未收到数据,进而采取重发,导致一条队列里有非常多重复的数据。######我可能会使用数据写入日志文件,然后定时将日志入库的办法操作######大概意思可能是多线程对数据库表的操作导致数据表锁定,性能损失在内耗上了。。那数据表采用行级锁呢?(这样会增大系统开销)我是菜鸟,求教  ######回复 @xinzaibing : 这个应该是属于最初的设计问题,hohoho######回复 @asdfsx : 目前我也在往这方面考虑,如果数据分类处理。那就得大改结构了...唉######回复 @xinzaibing : 建议根据上传的不同数据进行不同的处理,不要一股脑的都放在缓存中,如果是心跳的话,应该立即响应,如果是要处理的数据的话,才需要进行缓存等待处理######ORACLE默认就是行级锁的应该.. 主要是数据的写入速度远远小于数据上传的速度,导致了缓存溢出,紧急数据不能得到及时处理,大量数据出现超时失效,无法对嵌入式的采集器程序作出及时的心跳相应和其他回复(因为都在队列中,无法处理,无心跳的话嵌入式采集器会误认为服务器断线)。最终导致单台服务器接入数据的嵌入式设备的数量太少,不满足需求。######去年刚毕业,由于公司小,一个人搞后台,压力太大啊...大家指指招呗~ @中山野鬼######今天到图书馆看了一本书《让Orcale跑的更快点》,上面说可以从如下几个方面优化: 数据库方面:建适当的索引,固定长度;查询条件比较尽量简化;不同的表放在不同的磁盘里…… 服务层:增大缓存,(有没有数据库连接池不知道你能用上不) 软件层:对Java使用PaperStatement 囫囵吞枣就记得这么多了。。。哭~~######非常感谢...我去看看这本书 :)######我不清楚你的数据采集的内容是什么。不过看的出,对实时性要求高。换我,基本上就一个思路。 1、做个前段服务器,什么事情都不干,只进行数据的压缩。然后所有数据库和计算操作,放到后端。 至于并发,你这种 1W=100台服务器的方式治标不治本。######@中山野鬼 是说对数据进行预处理,提取有效内容?还是就是zip?######回复 @asdfsx : 不一样的。而是数据压缩。采样数据中间,信息密度不会太大的。######老鬼的思路有点像我说的那个数据写日志文件,或者内存缓存定时入库...........都被否定了啊######@xinzaibing 还有一个建议,上传的数据加一个验证,如果上传的数据已经插入缓存,就不要再次插入了。无脑插入插到崩也不是什么好主意啊######回复 @asdfsx : 要回复的,要处理成功后才回复,存库失败或者某些异常导致服务端崩溃重启,就不进行回复,客户端会持续地进行重发,重发到一定次数后,存本地,等恢复正常后发送存本地的数据

kun坤 2020-06-09 11:56:38 0 浏览量 回答数 0

问题

如何保证缓存与数据库的双写一致性?【Java问答】38期

剑曼红尘 2020-06-16 12:58:57 36 浏览量 回答数 1

回答

转自:阿飞的博客 一、数据库技术选型的思考维度 我们做选型的时候首先要问: 谁选型?是负责采购的同学、 DBA 还是业务研发? 如果选型的是采购的同学,他们更注重成本,包括存储方式、网络需求等。 如果选型的是 DBA 同学,他们关心的: ① 运维成本 首先是运维成本,包括监控告警是否完善、是否有备份恢复机制、升级和迁移的成本是否高、社区是否稳定、是否方便调优、排障是否简易等; ② 稳定性 其次,DBA会关注稳定性,包括是否支持数据多副本、服务高可用、多写多活等; ③ 性能 第三是性能,包括延迟、QPS 以及是否支持更高级的分级存储功能等; ④ 拓展性 第四是扩展性,如果业务的需求不确定,是否容易横向扩展和纵向扩容; ⑤ 安全 最后是安全,需要符合审计要求,不容易出现 SQL 注入或拖库情况。 ⑥ 其他 除了采购和 DBA之外,后台应用研发的同学同样会关注稳定性、性能、扩展性等问题,同时也非常关注数据库接口是否便于开发,是否便于修改数据库 schema 等问题。 接下来我们来看一下爱奇艺使用的数据库类型: MySQL,互联网业务必备系统; TiDB,爱奇艺的 TiDB 实践会有另外的具体介绍; Redis,KV 数据库,互联网公司标配; Couchbase,这个在爱奇艺用得比较多,但国内互联网公司用得比较少,接下来的部分会详细说明; 其他,比如 MongoDB、图数据库、自研 KV 数据库 HiKV 等; 大数据分析相关系统,比如 Hive、Impala 等等。 可以看到爱奇艺的数据库种类还是很多的,这会造成业务开发的同学可能不太清楚在他的业务场景下应该选用哪种数据库系统。 那么,我们先对这些数据库按照接口(SQL、NoSQL)和面向的业务场景(OLTP、OLAP)这两位维度进行一个简单非严谨的分类。 下图中,左上角是面向 OLTP、支持 SQL 的这样一类系统,例如 MySQL,一般支持事务不同的隔离级别, QPS 要求比较高,延时比较低,主要用于交易信息和关键数据的存储,比如订单、VIP 信息等。 左下角是 NoSQL 数据库,是一类针对特殊场景做优化的系统,schema 一般比较简单,吞吐量较高、延迟较低,一般用作缓存或者 KV 数据库。 整个右侧都是 OLAP 的大数据分析系统,包括 Clickhouse、Impala等,一般支持SQL、不支持事务,扩展性比较好,可以通过加机器增加数据的存储量,响应延迟较长。 还有一类数据库是比较中立的,在数据量比较小的时候性能比较好,在数据量较大或复杂查询的时候性能也不差,一般通过不同的存储引擎和查询引擎来满足不同的业务需求,我们把它叫做 HTAP,TiDB 就是这样一种数据库。 二、iQIYI对数据库的优化与完善 前面我们提到了很多种的数据库,那么接下来就和大家介绍一下在爱奇艺我们是怎么使用这些数据库的。 1、MySQL在爱奇艺的使用 ① MySQL 首先是 MySQL。MySQL 基本使用方式是 master-slave + 半同步,支持每周全备+每日增量备份。我们做了一些基本功能的增强,首先是增强了数据恢复工具 Xtrabackup 的性能。 之前遇到一个情况,我们有一个全量库是 300G 数据,增量库每天 70G 数据,总数据量 700G 左右。我们当时只需要恢复一个表的数据,但该工具不支持单表恢复,且整库恢复需要 5 个小时。 针对这个情况我们具体排查了原因,发现在数据恢复的过程中需要进行多次写盘的 IO 操作并且有很多串行操作,所以我们做了一些优化。例如删减过程中的一些写盘操作,减少落盘并将数据处理并行化,优化后整库恢复耗时减少到 100 分钟,而且可以直接恢复单表数据。 然后是适配 DDL 和 DML 工具到内部系统,gh-ostt 和 oak-online-alter-table 在数据量大的时候会造成 master-slave 延时,所以我们在使用工具的时候也增加了延时上的考虑,实时探测Master-Slave 库之间延时的情况,如果延时较大会暂停工具的使用,恢复到正常水平再继续。 ② MySQL高可用 第二是 MySQL 高可用。Master-slave 加上半同步这种高可用方式不太完善,所以我们参照了 MHA 并进行了改动,采用 master + agent 的方式。Agent 在每一个物理机上部署,可以监控这个物理机上的所有实例的状态,周期性地向 master 发送心跳,Master 会实时监测各个Agent的状态。 如果 MySQL故障,会启动 Binlog 补偿机制,并切换访问域名完成 failover。考虑到数据库跨机房跨地区部署的情况,MHA 的 master 我们也做了高可用设计,众多 master 会通过 raft 组成一个 raft group,类似 TiDB 的 PD 模块。目前 MySQL failover 策略支持三种方式:同机房、同地域跨机房以及跨地域。 ③ MySQL拓展能力 第三是提高MySQL扩展能力,以提供更大容量的数据存储。扩展方式有 SDK,例如开源的 ShardingSphere,在爱奇艺的使用也比较广泛。另外就是 Proxy,开源的就更多了。但是 SDK 和 Proxy 使用的问题是支持的 SQL 语句简单,扩容难度大,依赖较多且运维复杂,所以部分业务已经迁移至 TiDB。 ④ 审计 第四是审计。我们在 MySQL 上做了一个插件获取全量 SQL 操作,后端打到 Kafka,下游再接入包括 Clickhouse 等目标端进行 SQL 统计分析。除此之外还有安全策略,包括主动探索是否有 SQL 注入及是否存在拖库情况等,并触发对应的告警。 MySQL 审计插件最大的问题是如何降低对 MySQL 性能的影响,对此我们进行了一些测试,发现使用 General Log 对性能损耗较大,有 10%~20% 的降低。 于是我们通过接口来获取 MySQL 插件里的监控项,再把监控项放到 buffer 里边,用两级的 RingBuffer 来保证数据的写入不会有锁资源竞争。在这个插件里再启动一个线程,从 RingBuffer 里读取数据并把数据打包写到 FIFO 管道里。 我们在每台 MySQL 的物理机里再启动一个 Agent,从管道里阻塞地读取数据发至 Kafka。优化后我们再次进行压测,在每台机器上有 15 万的更新、删除或插入操作下不会丢失数据,性能损耗一般情况下小于 2%。 目前已经在公司内部的集群上线了一年时间,运行比较稳定,上线和下线对业务没有影响。 ⑤ 分级存储 第五是分级存储。MySQL 里会存一些过程性的数据,即只需要读写最近一段时间存入的数据,过段时间这些数据就不需要了,需要进行定时清理。 分级存储就是在 MySQL 之上又用了其他存储方式,例如 TiDB 或其他 TokuDB,两者之间可以进行数据自动搬迁和自动归档,同时前端通过 SDK + Proxy 来做统一的访问入口。这样一来,业务的开发同学只需要将数据存入 MySQL 里,读取时可能从后端接入的任意数据库读出。这种方式目前只是过渡使用,之后会根据 TiDB 的特性进行逐步迁移。 Redis在爱奇艺的使用 接下来是 Redis。Redis 也是使用 master - slave 这种方式,由于网络的复杂性我们对 Sentinel 的部署进行了一些特殊配置,在多机房的情况下每个机房配置一定数量 Sentinel 来避免脑裂。 备份恢复方面介绍一个我们的特殊场景,虽然 Redis 是一个缓存,但我们发现不少的业务同学会把它当做一个 KVDB 来使用,在某些情况下会造成数据的丢失。 所以我们做了一个 Redis 实时备份功能,启动一个进程伪装成 Redis 的 Slave 实时获取数据,再放到后端的 KV 存储里,例如 ScyllaDB,如果要恢复就可以从 ScyllaDB 里把数据拉出来。 我们在用 Redis 时最大的痛点就是它对网络的延迟或抖动非常敏感。如有抖动造成 Redis Master 超时,会由 Sentinel 重新选出一个新的节点成为 Master,再把该节点上的数据同步到所有 Slave 上,此过程中数据会放在 Master 节点的 Buffer 里,如果写入的 QPS 很高会造成 Buffer 满溢。如果 Buffer 满后 RDB 文件还没有拷贝过去,重建过程就会失败。 基于这种情况,我们对 Redis 告警做了自动化优化,如有大量 master - slave 重建失败,我们会动态调整一些参数,例如把 Buffer 临时调大等, 此外我们还做了 Redis 集群的自动扩缩容功能。 我们在做 Redis 开发时如果是 Java 语言都会用到 Jedis。用 Jedis 访问客户端分片的 Redis 集群,如果某个分片发生了故障或者 failover,Jedis 就会对所有后端的分片重建连接。如果某一分片发生问题,整个 Redis 的访问性能和 QPS 会大幅降低。针对这个情况我们优化了 Jedis,如果某个分片发生故障,就只针对这个分片进行重建。 在业务访问 Redis 时我们会对 Master 绑定一个读写域名,多个从库绑定读域名。但如果我们进行 Master failover,会将读写域名从某旧 Master 解绑,再绑定到新 Master 节点上。 DNS 本身有一个超时时间,所以数据库做完 failover 后业务程序里没有立刻获取到新的 Master 节点的 IP的话,有可能还会连到原来的机器上,造成访问失败。 我们的解决方法是把 DNS 的 TTL 缩短,但对 DNS 服务又会造成很大的压力,所以我们在 SDK 上提供 Redis 的名字服务 RNS,RNS 从 Sentinel 里获取集群的拓扑和拓扑的变化情况,如果集群 failover,Sentinel 会接到通知,客户端就可以通过 RNS 来获取新的 Master 节点的 IP 地址。我们去掉域名,通过 IP 地址来访问整个集群,屏蔽了 DNS 的超时,缩短了故障的恢复时间。 SDK 上还做了一些功能,例如 Load Balance 以及故障检测,比如某个节点延时较高的话会被临时熔断等。 客户端分片的方式会造成 Redis 的扩容非常痛苦,如果客户端已经进行了一定量的分片,之后再增加就会非常艰难。 Redis 在 3.0 版本后会提供 Redis Cluster,因为功能受限在爱奇艺应用的不是很多,例如不支持显示跨 DC 部署和访问,读写只在主库上等。 我们某些业务场景下会使用 Redis 集群,例如数据库访问只发生在本 DC,我们会在 DC 内部进行 Cluster 部署。 但有些业务在使用的过程中还是想做 failover,如果集群故障可以切换到其他集群。根据这种情况我们做了一个 Proxy,读写都通过它来进行。写入数据时 Proxy 会做一个旁路,把新增的数据写在 Kafka 里,后台启用同步程序再把 Kafka 里的数据同步到其他集群,但存在一些限制,比如我们没有做冲突检测,所以集群间数据需要业务的同学做单元化。线上环境的Redis Cluster 集群间场景跨 DC 同步 需要 50 毫秒左右的时间。 2、Couchbase在爱奇艺的使用 Redis 虽然提供 Cluster 这种部署方式,但存在一些问题。所以数据量较大的时候(经验是 160G),就不推荐 Redis 了,而是采用另一种存储方式 Couchbase。 Couchbase 在国内互联网公司用的比较少,一开始我们是把他当做一个 Memcached 来使用的,即纯粹的缓存系统。 但其实它性能还是比较强大的,是一个分布式高性能的 KV 系统,支持多种存储引擎 (bucket)。第一种是 Memcached bucket,使用方式和 Memcached 一样为 KV 存储,不支持数据持久化也没有数据副本,如果节点故障会丢失数据; 第二种是 Couchbase bucket,支持数据持久化,使用 Json 写入,有副本,我们一般会在线上配置两个副本,如果新加节点会对数据进行 rebalance,爱奇艺使用的一般是 Couchbase bucket 这种配置。 Couchbase 数据的分布如下图,数据写入时在客户端上会先进行一次哈希运算,运算完后会定位 Key 在哪一个 vBucket (相当于数据库里的某个分片)。之后客户端会根据 Cluster Map 发送信息至对应的服务端,客户端的 Cluster Map 保存的是 vBucket 和服务器的映射关系,在服务端数据迁移的过程中客户端的 Cluster Map 映射关系会动态更新,因此客户端对于服务端的 failover 操作不需要做特殊处理,但可能在 rebalance 过程中会有短暂的超时,导致的告警对业务影响不大。 Couchbase 在爱奇艺应用比较早,2012 年还没有 Redis Cluster 的时候就开始使用了。集群管理使用 erlang 语言开发,最大功能是进行集群间的复制,提供多种复制方式:单向、双向、星型、环式、链式等。 爱奇艺从最初的 1.8 版本使用到如今的 5.0 版本,正在调研的 6.0,中间也遇到了很多坑,例如 NTP 时间配置出错会导致崩溃,如果每个集群对外 XDCR 并发过高导致不稳定,同步方向变更会导致数据丢失等等,我们通过运维和一些外部工具来进行规避。 Couchbase 的集群是独立集群,集群间的数据同步通过 XDCR,我们一般配置为双向同步。对于业务来说,如果 Cluster 1 写入, Cluster 2 不写入,正常情况下客户端会写 Cluster 1。如果 Cluster 1 有故障,我们提供了一个 Java SDK,可以在配置中心把写入更改到 Cluster 2,把原来到 Cluster 1 的连接逐步断掉再与Cluster 2 新建连接。这种集群 failover 的过程对于客户端来说是相对透明和无感的。 3、爱奇艺自研数据库HiKV的使用 Couchbase 虽然性能非常高,并且数据的存储可以超过内存。但是,如果数据量超过内存 75% 这个阈值,性能就会下降地特别快。在爱奇艺,我们会把数据量控制在可用内存的范围之内,当做内存数据库使用。但是它的成本非常高,所以我们后面又开发了一个新的数据库—— HiKV。 开发 HiKV 的目的是为了把一些对性能要求没那么高的 Couchbase 应用迁移到 HiKV 上。HiKV 基于开源系统 ScyllaDB,主要使用了其分布式数据库的管理功能,增加了单机存储引擎 HiKV。 ScyllaDB 比较吸引人的是它宣称性能高于 Cassandra 十倍,又完全兼容 Cassandra 接口,设计基本一致,可以视为 C++ 版 Cassandra 系统。 ScyllaDB 性能的提升主要是使用了一些新的技术框架,例如 C++ 异步框架 seastar,主要原理是在j每台物理机的核上会 attach 一个应用线程,每个核上有自己独立的内存、网络、IO 资源,核与核之间没有数据共享但可以通信,其最大的好处是内存访问无锁,没有冲突过程。 当一个数据读或写到达 ScyllaDB 的 server 时,会按照哈希算法来判断请求的 Key 是否是该线程需要处理的,如果是则本线程处理,否则会转发到对应线程上去。 除此之外,它还支持多副本、多数据中心、多写多活,功能比较强大。 在爱奇艺,我们基于 SSD 做了一个 KV 存储引擎。Key 放在内存里,Value 放在盘上的文件里,我们在读和写文件时,只需要在内存索引里定位,再进行一次盘的 IO 开销就可以把数据读出来,相比 ScyllaDB 原本基于 LSM Tree 的存储引擎方式对 IO 的开销较少。 索引数据全部放在内存中,如果索引长度较长会限制单机可存储的数据量,于是我们通过开发定长的内存分布器,对于比较长的 Key 做摘要缩短长度至 20 字节,采用红黑树索引,限制每条记录在内存里的索引长度至为 64 字节。内存数据要定期做 checkpoint,客户端要做限流、熔断等。 HiKV 目前在爱奇艺应用范围比较大,截至目前已经替换了 30% 的 Couchbase,有效地降低了存储成本。 4、爱奇艺的数据库运维管理 爱奇艺数据库种类较多,如何高效地运维和管理这些数据库也是经历了不同的阶段。 最初我们通过 DBA 写脚本的方式管理,如果脚本出问题就找 DBA,导致了 DBA 特别忙碌。 第二个阶段我们考虑让大家自己去查问题的答案,于是在内部构建了一个私有云,通过 Web 的方式展示数据库运行状态,让业务的同学可以自己去申请集群,一些简单的操作也可以通过自服务平台实现,解放了 DBA。一些需要人工处理的大型运维操作经常会造成一些人为故障,敲错参数造成数据丢失等。 于是在第三个阶段我们把运维操作 Web 化,通过网页点击可以进行 90% 的操作。 第四个阶段让经验丰富的 DBA 把自身经验变成一些工具,比如有业务同学说 MySQL master-slave 延时了,DBA 会通过一系列操作排查问题。现在我们把这些操作串起来形成一套工具,出问题时业务的同学可以自己通过网页上的一键诊断工具去排查,自助进行处理。 除此之外我们还会定期做预警检查,对业务集群里潜在的问题进行预警报告;开发智能客服,回答问题;通过监控的数据对实例打标签,进行削峰填谷地智能调度,提高资源利用率。 三、不同场景下数据库选型建议 1、实用数据库选型树 最后来说一些具体数据库选型建议。这是 DBA 和业务一起,通过经验得出来的一些结论。 对于关系型数据库的选型来说,可以从数据量和扩展性两个维度考虑,再根据数据库有没有冷备、要不要使用 Toku 存储引擎,要不要使用 Proxy 等等进行抉择。 NoSQL 也是什么情况下使用 master-slave,什么情况下使用客户端分片、集群、Couchbase、HiKV 等,我们内部自服务平台上都有这个选型树信息。 2、一些思考 ① 需求 我们在选型时先思考需求,判断需求是否真实。 你可以从数据量、QPS、延时等方面考虑需求,但这些都是真实需求吗?是否可以通过其他方式把这个需求消耗掉,例如在数据量大的情况下可以先做数据编码或者压缩,数据量可能就降下来了。 不要把所有需求都推到数据库层面,它其实是一个兜底的系统。 ② 选择 第二个思考的点是对于某个数据库系统或是某个技术选型我们应该考虑什么?是因为热门吗?还是因为技术上比较先进?但是不是能真正地解决你的问题?如果你数据量不是很大的话就不需要选择可以存储大数据量的系统。 ③ 放弃 第三是放弃,当你放弃一个系统时真的是因为不好用吗?还是没有用好?放弃一个东西很难,但在放弃时最好有一个充分的理由,包括实测的结果。 ④ 自研 第四是自研,在需要自己开发数据库时可以参考和使用一些成熟的产品,但不要盲目自研。 ⑤ 开源 最后是开源,要有拥抱开源的态度。

茶什i 2019-12-27 14:17:56 0 浏览量 回答数 0

问题

OSS 官方帮助文档 在此归类发布 ,常见问题基本能在这里找到答案。

asky8 2019-12-01 21:21:14 47894 浏览量 回答数 17

问题

【面试必备】2020最新Java集合容器面试题

剑曼红尘 2020-03-24 14:00:04 7 浏览量 回答数 1

问题

【阿里云产品公测】简单日志服务SLS使用评测含教程

mr_wid 2019-12-01 21:08:11 36639 浏览量 回答数 20

问题

程序员报错行为大赏-配置报错

问问小秘 2020-06-11 13:18:25 6 浏览量 回答数 1

问题

HiTSDB高性能时间序列数据库产品解析

福利达人 2019-12-01 21:09:24 4058 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站