上海企业建站流程电子商务专业就业方向女生
上海企业建站流程,电子商务专业就业方向女生,廊坊核酸检测结果,初学网站开发为什么要迁移#xff0c;江湖上传说windows server的稳定性不如某某某#xff0c;这类议题与八卦新闻没两样#xff0c;不谈#xff0c;如果windows的价钱能够和linux相同或者差异不至于那么大#xff0c;我才懒得换#xff0c;因为穷#xff0c;这才是重点。 涉及IO路径… 为什么要迁移江湖上传说windows server的稳定性不如某某某这类议题与八卦新闻没两样不谈如果windows的价钱能够和linux相同或者差异不至于那么大我才懒得换因为穷这才是重点。 涉及IO路径拼接一定要Path.Combine, 反正我自己眼力比较差手工拼接的话有时候多一个或少一个斜杠或者斜杠方向反了Linux系统都会出错搞半天不知道错在哪如果大小写都搞错却没注意或者一时不知的话神仙都救不了。 注意用System.Environment.NewLine代替硬编码的换行符String.Empty代替这两个看不见的东西发作的时候喝脑白金都没用。 而core在初始化的时候会遍历wwwroot文件夹包含的所有内容在windows中无所谓你文件夹怎么命名在中文centos也无所谓你文件夹怎么命名。但是如果你的生产服务器是英文系统恰好在wwwroot中有中文文件夹的话你都不知道为什么会全局报错。关于中文文件夹在某些时刻会演变为乱码文件夹我也不知哪里来的有些客户端编辑器组件就是包含了非英文的文件夹。所以搭建虚拟机测试环境的时候guest系统需要安装英文版本来验证。 newtonsoft的json在反序列化枚举类型的时候得到的是名微软自家的json在反序列化枚举的时候得到的是值虽然可以通过特性来定义但是本人对特性相当反感全套代码不会用也不可能会用所以有时候需要用class来代替enum。 Microsoft.AspNetCore.NodeServices 是个好东西就简单来说正则表达式验证库只写一次客户端和服务端都可以共用。 Program.Main方法里可以建立后台线程里面放一个全局静态的ConcurrentQueueActionwhile(true)定时监视它今天我们编写的是进程级的asp.net你可以让它做很多IIS做不到的真正异步比如说记录某些日志扔action进去就是了不必等待。 事情还可以做得更绝一些开辟新进程把代价高昂的、不确定是否会出错的、却需要立即清理内存的操作丢给它操作完了自动关闭在这一层面上你可以藐视.net的垃圾回收。 如果你实在玩不来gulp也没关系装个BundlerMinifier就行了右键选几个js后自动压缩 能用PocoController的时候尽量用比如说某些频繁的API它的资源占用最小。 为HttpClient建立池static ConcurrentQueueHttpClient两三个就够了一般不会出错但是谁也不能保证网络请求错了一个就让下一个来代替然后把出错的扔到上面的ConcurrentQueueAction中让它爱什么时候销毁什么时候销毁。 文件级数据库比如说SQLite也需要ConcurrentQueueAction来封装写入逻辑绝对的保证同一时刻只有一个线程写同时做好定时自动备份并且是每小时、每半天、每天、每星期这样的多个备份否则不可预料的IO把你的数据库搞坏喊天天不应。 总会遇到有人和你劝说XXX是世界上最好的语言遇到这些事情我不会争论的给他一份最新的岛国女演员名单就可以了。 windows上你不能覆盖一个正在运行中的dll但是linux上可以先覆盖再重启但是如果连重启都不允许的话就开启新的端口让前段服务器热切换,nginx的reload命令是实时的如果你连前nginx也没有直接kestrel面向公众却又不允许一秒钟以上的暂停服务那就新建服务器来等待域名DNS切换吧。 传统ASP.NET的Bundle功能现在见不到了需要在开发阶段手动通过gulp来压缩但是如果遇到需要实时构造js的情况怎么办 现在既然有了NodeServices服务端压缩在理论上不是问题目前我还没实现正在研究。 别折腾与XML相关的东西凡是XML做的事都可以用JSON来代替光是头部一大车的uri垃圾代码与脱裤子放屁的namespace两项足以让我彻底抛弃它。 该缓存的东西用内存来缓存比如说某些不可能上万条目的目录 建一个静态字典才1M不到却可以少做一次inner join。 该不该内联javascript对此我分两个阶段项目初期是内联几句最简单的代码动态生成script标签来请求真正需要的javascript然后把内容记录到本地indexedDB中以后再也不请求js代码了从本地数据库中读即可head加一个meta标签来标识javascript是否需要重新读取,css也是同样的道理如此一来内联的代码也就十多行这价钱花得起。到了第二阶段内联和本地数据库也省了因为有了http2服务端推送结合max-age一次TCP连接也是花费得起的注意这里说的是TCP, TCP!它同样是仅一次真正传输内容。 关于 public async TaskIActionresult xxxx() 此异步非彼异步具体就不详解了请自行搜索。有时候我们需要在一个请求上下文中同时做到等同于桌面应用中的“真异步”你就不要await虽然visual studio会给出绿色提示说让你为某个task加上await加上的话你才是错了。而是应该TASK的start()后干别的事情在方法最后统一waitall。当然此方式涉及到线程开销要根据具体问题来取舍。 可能你会需要这一段代码否则MVC自带的 return Json(某对象) 会被强制修改为小写据说那是JSON规范少来鸡毛规范和我一点关系没有我只认识过度的自作聪明是找骂。 1 2 3 4 5 6 7 8 9 services.AddMvc().AddJsonOptions(opt { var resolver opt.SerializerSettings.ContractResolver; if (resolver ! null ) { var res resolver as DefaultContractResolver; res.NamingStrategy null ; // !-- 修正默认JSON全部变成小写的问题 } }); 同理关闭一切杀毒软件包括windows defender我就遭遇到windows defender要求上传一份sqlite的操作代码到它的服务器作分析而这份代码是来自最新的core 1.1又不是我写的传或不传呢这不重要重要的是我因此把windows defender永久禁用。还好它没删东西但是换做别家可能就没这么好说话了到时你的kestrel一直报500都不知道为什么。 通过某时间段的请求频率确定恶意刷新后立即永久屏蔽IPIP列表保留在内存中Configre的app.UseMiddleware阶段就进行判断10M的IP列表加上集群负载均衡压力再大的话请求azure的防火墙加持这一切都应该是程序进行azure有相应API看谁玩得狠。 注意检查服务器日志某些阿三搜索引擎、自诩为你安全着想的防火墙、三流云监测、等等会加大你的服务器压力从IP和UserAgent上两方面屏蔽它们。 注意识别请求路径比如说遇到请求“/phpmyadmin”的绝对是加入永久屏蔽IP列表。 个人问题不具备参考价值请勿仿效数据库架构尽可能简单从前基于SQLServer什么乱七八糟的功能都用上但是同时也造就了迁移过程中一道巨大的壁垒解决办法有三 只迁移应用程序不迁移数据库但是如果说应用程序运行在Linux却依然依赖于Windows上的SQLServer的话对于系统的迁移目的来说是掩耳盗铃。Linux版SQLServer且先不说它目前是RC重点依然是个人原因需要一台4G内存的主机穷买不起。当年谷歌通过廉价PC构造集群的思路始终值得学习。【采用】重构数据库架构什么存储过程、地理编码、表间关联…… 通通不要了个人问题不具备参考价值请勿仿效由应用程序来代替之数据库只保留最基本的表存储、最基本的数据类型、做到最大的兼容性于是现在服务器A基于SQLServer、服务器B基于SQLite、服务器C基于MySQL、它们共用相同的应用程序、分布在三个地理位置组成API集群定时相互同步数据让各种各样的前端服务器、移动端应用程序根据地理位置的变化、实时热切换数据源同时使用三个不同的数据库来运作是出于实验目的打算再观察几个月看看它们分别有什么表现为以后能否在经济上优化作参考。 同时几台www服务器组成另一个集群处理各种客户端的交互包括与APP交互www集群节点也具备集群中某一节点崩溃时自动重建功能但是不与数据库直接打交道只与API集群交互不可感知API服务器的再后端使用了什么数据库。如此就具备了热切换API节点的能力为什么要构造“两道转轮”式的架构呢因为频繁的功能更新、BUG修复只要保证通信协议的不变无论是WWW集群或API集群中任一节点下线都不会影响整套系统的运行域名的DNS服务层面上监视着WWW集群的健康状态最终客户正在请求的某个www节点下线时DNS服务器可感知便会实时把最终客户的域名请求调度到下一个健康的www节点的IP而www集群所有节点也记录了所有api集群节点的地址可以在当前与API的通信崩溃时自动筛选到下一健康节点尝试连接筛选的过程是地理位置优先然后是健康状态。它们跨洋分布在三个国家除非三个国家都同时停电否则系统将会完好运行最终客户不会感知到变化。 下面是我用一段JSON伪代码来描述它们之间的关系注意颜色对应x表示会变动的下标 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 { client: {member:[html-web, winform, ios, android], request:wwwserver[x]}, wwwserver: [ node1:{kestrel1:{server:www, request: apiserver[x]}, kestrel2:fileserver}, node2:{kestrel1:{server:www, request: apiserver[x]}, kestrel2:fileserver}, node3:{kestrel1:{server:www, request: apiserver[x]}, kestrel2:fileserver} ], apiserver: [ node1:{database:sqlite}, node2:{database:sqlserver}, node3:{database:mysql} ] } 下面再来说说文件服务器它们是第三层集群也就是上面伪代码中的fileserver 因为我的服务器中有大量的照片它们的流量是个很大的问题说要租CDN吗1T流量一年300块钱左右平均下来每个月850M我某个主题就包含200多张照片要花50M的流量为什么这么大过去1280宽度的屏幕照片就得2560宽度然后CSS缩小50%通过这样间接的超采样才能照顾retina。这 850M/每月 够塞几次牙缝加流量吧10T每年需要3000块钱而这价钱可以买上好几台性能不错的服务器了而且免流量。而且10T还不一定够再加 穷。 所以在很久以前的最前期我弄了个投机办法但不是长久之计淘宝卖家图片空间支持外链它分布全国的cdn不用说了吧。我在博客园同样也上传有很多照片不过请站长放心我没干那事以后也不打算干。 淘宝图片空间总有一天它会关闭或者加某些限制的所以目前已经不再添加新的东西进去了但是在有些页面上还在链接着懒有空再改。【目前的方案】自建文件服务器目前它们分布在浙江、武汉、山东、成都、美人希www服务器会根据请求者的地理位置返回 img srchttps://最近的文件服务器IP /依然是基于成本考虑国内这四个地区服务器的总运营成本每年2000块钱左右而且免流量。而在国外的服务器基于azure也是买的最廉价版本每月14.88美元按照7的汇率换算约104每月每月1T流量看似还是不够但是要知道在网络zi-you区绑定cloudflare的免费cdn就行了。 国内的四个文件服务器直接请求IP反正img的src是动态的一来免去了那道你懂的手续二来没有dns也相对的提升了速度。当然也留有一手后路一个总开关统一请求美人希反正那时候就不是快与慢的问题了。这几个文件服务器之间也自发性的组成一个集群它们会相互同步文件坏了没关系集群中的第一个感知到的节点会通过API尝试重启三次重启失败的话会销毁旧的同时建立一个新的服务器然后再自动同步。 这下知道我为什么要把代码放到linux了吧便宜你仔细找还是可以找到的windows不可能有这价钱坏了拉倒立即重建整个自动化重建过程不到5分钟。重建后服务器间的同步填充通过http2的流式连接快得很。而通过core的selfhost编译出来的应用程序你的裸机根本不需要装运行时sftp传上去就立即启动运作azure上就更方便了我之前建好iso基于iso启动就完事传程序都免了只需同步内容数据。 说到这又验证了一个道理这个世界只分为两处墙内和墙外。 这样一来每年总的运营成本3400块钱左右基本上不需要再为流量操心。当然光是这么做还不够为了缓解瞬间并发压力客户端缓存是必不可少的Cache-Control 的 max-age 设置了尽可能的大反正二进制文件不可能更改的要改也是改img的src。同时也通过http2来优化连接效率关于http2以下是我给出的配置从一台centos 7.1裸机起步假设已经是root 暂时利用一下nginx: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 添加 /etc/yum .repos.d /nginx .repo 内容: [nginx] namenginx repo baseurlhttp: //nginx .org /packages/centos/ $releasever/$basearch/ gpgcheck0 enabled1 yum install nginx #目前是1.10.2先让它自动安装。重点是它会替你去折腾各种配置。 然后 yum install vim wget lsof gcc gcc -c bzip2 -y yum install net-tools bind-utils -y yum install expat-devel yum install git wget http: //sourceforge .net /projects/pcre/files/pcre/8 .36 /pcre-8 .36. tar .gz wget http: //zlib .net /zlib-1 .2.8. tar .gz wget https: //www .openssl.org /source/openssl-1 .0.2h. tar .gz wget http: //nginx .org /download/nginx-1 .10.2. tar .gz tar xzvf pcre-8.36. tar .gz tar zxf openssl-1.0.2h. tar .gz tar xzvf zlib-1.2.8. tar .gz tar xzvf nginx-1.10.2. tar .gz git clone git: //github .com /yaoweibin/ngx_http_substitutions_filter_module .git git clone https: //github .com /arut/nginx-dav-ext-module git clone https: //github .com /gnosek/nginx-upstream-fair git clone https: //github .com /openresty/echo-nginx-module cd nginx-1.10.2 . /configure --prefix /etc/nginx --sbin-path /usr/sbin/nginx --modules-path /usr/lib64/nginx/modules --conf-path /etc/nginx/nginx .conf --error-log-path /var/log/nginx/error .log --http-log-path /var/log/nginx/access .log --pid-path /var/run/nginx .pid --lock-path /var/run/nginx .lock --http-client-body-temp-path /var/cache/nginx/client_temp --http-proxy-temp-path /var/cache/nginx/proxy_temp --http-fastcgi-temp-path /var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path /var/cache/nginx/uwsgi_temp --http-scgi-temp-path /var/cache/nginx/scgi_temp --usernginx --groupnginx --with- file -aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-zlib.. /zlib-1 .2.8 --with-pcre.. /pcre-8 .36 --with-openssl.. /openssl-1 .0.2h --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE2 -fexceptions -fstack-protector-strong --paramssp-buffer-size4 -grecord-gcc-switches -m64 -mtunegeneric --add-module.. /echo-nginx-module --add-module.. /nginx-upstream-fair --add-module.. /nginx-dav-ext-module --add-module.. /ngx_http_substitutions_filter_module make make install 现在就可以按照你自己的需求配置nginx了。下面是https的配置 yum -y install git bc git clone https: //github .com /letsencrypt/letsencrypt /opt/letsencrypt /opt/letsencrypt/letsencrypt-auto --help systemctl stop nginx /opt/letsencrypt/letsencrypt-auto certonly --standalone -d example.com -d www.example.com -d foo.example.com # -d后面是你的各种域名注意修改 systemctl start nginx openssl dhparam -out /etc/ssl/certs/dhparam .pem 2048 到此你的nginx已经可以支持http2和http2了。只强调两点1openssl 必须是 1.0.2h 或者更高2如果你的服务器身在墙内yum下载各种包的时候有可能会遇到网络问题这不是你的错。 哪怕你不需要http2但是你一定会需要https从2017年开始chrome会对普通http提示“这是不安全网络”有些心理毛病的客户会据此猜测你的网站有病毒、甚至还会演变为你的网站会盗他支付宝的钱、甚至他家的鸡少下一个蛋都会说你网站有辐射你会去和这类人解释什么叫ssl吗我是不会的。 苹果AppStore不再接受请求http的app发布意味着如果你的服务器同时是app的api就必须升级。 下面是一段server的例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 server { listen 443 ssl http2; server_name www.*; ssl_certificate /etc/letsencrypt/live/ 你的具体路径 /fullchain .pem; ssl_certificate_key /etc/letsencrypt/live/ 你的具体路径 /privkey .pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam .pem; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDHAESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age15768000; location / { proxy_pass http: // 你的kestrel的实际运行地址; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } } 暂时先总结到此文中的azure指另一个世界的azure。至于镇内的四台服务器可随时乱搞爱怎么换就怎么换。 镇内的运营商有时候不得不做一些违背经营之道的事也是迫不得已体谅他们的同时自己也不得不留一手后备之路。也幸亏他们从前一个单机web小系统演变为今天如此复杂的分布式。 目前还待解决的问题 1 为什么我说要暂时利用一下nginx 虽然说kestrel自身也可以承载https但是目前每一个服务器节点上都运行着两个kestrel实例如果让它们直接面向公众就出现端口冲突问题所以也必须通过nginx来做反向代理否则我也不愿意折腾这事情目前也正在想法怎么可以抛弃前端代理现在思路是 合并两个服务的代码kestrel就只有一个了。分离到两台服务器成本翻倍穷。等你补充 为了整套系统的全面控制这事情是一定要做的而且我也不相信前端服务器必备的论点什么DDOS欢迎来搞。 2TypeScript的服务端运行通过Google搜索 typescript run on server 你会发现很多有趣的讨论为了更好的融合客户端与服务端。 3GPU计算一直是我向往的事情在我认为Core的优势不仅仅是跨平台“进程级”才是它的重点目前我们处于进程级就可以操控GPU而且Azure已经提供了搭配Tesla处理器的主机而目前我的这套系统也与地理坐标有着业务关联待我收集多一些数据再来开启这套技术怎么应用。 4仅存于疑问阶段根据P2P打洞原理服务器探测到多个请求者存在于同一个相距很近的地理区域时互相介绍两个请求者建立连接然后这两个请求者之间互相同步内容数据这一切都是基于javascriptindexedDB来实现。前提是他们都在打开某个不会短时间内关闭的连接。反正还待研究。 5目前我还卡在windows的visual studio上是因为项目库用的是visual studio online 的 git 同步备份代码明明两个月前我还在mac的vs code上可以同步代码现在我在非windows visual studio的一切git客户端都登不上去了包括windows版的vs code也登不上不是网络问题我用户名密码也没错连接VPN也是一样我搜了一下说要在项目主页里面寻找一个叫Secret什么的开关我找到了开了也没用而且我也没动过这些相关的东西如果是一开始就不行我也就认了现在是中途不让登了不是我的错搞了半小时不搞了以后有时间自建服务器。 6升级到1.1后visual studio可以编译但是不让发布了不知原因输出界面没有任何提示反正就是点击了发布之后瞬间完成动作实际却什么都没做。 现在通过自建命令行cmd文件来发布反正以后切换平台也是命令行编译发布也就无所谓了。 原文地址http://www.cnblogs.com/kvspas/p/dotnet-core-2years-by-liangyichen.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86756.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!