<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>技术博客 on 多少光年</title>
    <link>http://tietang.wang/</link>
    <description>Recent content in 技术博客 on 多少光年</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 19 Feb 2016 09:20:42 +0000</lastBuildDate><atom:link href="http://tietang.wang/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在golang应用中优雅的使用配置文件，并且简单优雅的快速接入分布式配置中心</title>
      <link>http://tietang.wang/posts/golang/golang%E5%BA%94%E7%94%A8%E4%B8%AD%E4%BC%98%E9%9B%85%E7%9A%84%E4%BD%BF%E7%94%A8%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%B9%B6%E4%B8%94%E7%AE%80%E5%8D%95%E4%BC%98%E9%9B%85%E7%9A%84%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5%E5%88%86%E5%B8%83%E5%BC%8F%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83/</link>
      <pubDate>Thu, 12 Jan 2023 15:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/golang/golang%E5%BA%94%E7%94%A8%E4%B8%AD%E4%BC%98%E9%9B%85%E7%9A%84%E4%BD%BF%E7%94%A8%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%B9%B6%E4%B8%94%E7%AE%80%E5%8D%95%E4%BC%98%E9%9B%85%E7%9A%84%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5%E5%88%86%E5%B8%83%E5%BC%8F%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83/</guid>
      <description>在golang应用中优雅的使用配置文件，并且简单优雅的快速接入分布式配置中心 配置文件类型有很多种，像常用的properties、yaml、ini、xml、json等，还有不太常见的plist（xml）、toml、 HOCON等，还有很多特别自定义的格式，甚至有些就直接使用脚本语言来替代，像python、js，groovy等，无论是哪种配置文件，基本上都是三种类型： 结构化：yaml，xml，json 非结构化扁平格式：properties 半结构化和扁平结合 那么多的配置文件，如何选择呢？可以尝试给配置文件做个排序，来指导选择；对于常用的配置文件格式中，按照人类理解和方便编写配置来排序： ini &amp;gt; properties &amp;gt; json &amp;gt; xml &amp;gt; yaml &amp;gt; toml 如果按照能配置复杂数据的复杂度来排序： xml &amp;gt; yaml &amp;gt; toml/json/plist &amp;gt; ini &amp;gt; properties 对于这么多格式的配置文件如何选择呢？如果又或者应用了一个三方库，使用了和自己应用不一样的格式的配置文件，就不能统一了，不仅要引用各种格式解</description>
    </item>
    
    <item>
      <title>安装PaddleSpeech Centos 出现CXXABI_1.3.8&#39; not found错误</title>
      <link>http://tietang.wang/posts/ai/paddlerspeech/</link>
      <pubDate>Mon, 12 Dec 2022 20:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/ai/paddlerspeech/</guid>
      <description>Centos 出现CXXABI_1.3.8&amp;rsquo; not found错误： 1 wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip http://mirror.ghettoforge.org/distributions/gf/el/7/gf/x86_64/gcc10-libstdc++-10.2.1-7.gf.el7.x86_64.rpm Download latest gf-release rpm from 1 http://mirror.ghettoforge.org/distributions/gf/el/7/gf/x86_64/ Install gf-release rpm: 1 # rpm -Uvh gf-release*rpm Install gcc10-libstdc++ rpm package: 1 # yum --enablerepo=gf install gcc10-libstdc++ 安装centos-release-scl 1 sudo yum install centos-release-scl 2、安装devtoolset，注意，如果想安装7.版本的，就改成devtoolset-7-gcc，以此类推 1 sudo yum install devtoolset-8-gcc* 3、激活对应的devtoolset，所以你可以一次安装多个版本的devtoolset，需要的时候用下面这条命令切换到对应的版本 1 scl enable devtoolset-8 bash 大功告成，查看一下gcc版本 1 gcc -v 显示为 gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 1 2 3 4 5 6 7 8 9 10 11 mv /usr/bin/gcc /usr/bin/gcc-4.8.5 ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc mv /usr/bin/g++ /usr/bin/g++-4.8.5 ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++ gcc --version g++ --version</description>
    </item>
    
    <item>
      <title>MacOS&#43;Ubuntu【mutipass】安装Rasa3.0</title>
      <link>http://tietang.wang/posts/ai/rasa3.0%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 12 Oct 2022 20:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/ai/rasa3.0%E5%AE%89%E8%A3%85/</guid>
      <description>MacOS+Ubuntu【mutipass】安装Rasa3.0 MacOS准备Ubuntu： 其他平台参考官网https://multipass.run，也可以使用docker或虚拟机。 macOS安装multipass： https://multipass.run/install 下载安装包 或者 brew install &amp;ndash;cask multipass 下载和启动ubutun, 建议使用20.04版本，默认python3为3.8，并命名为rubuntu： snapcraft:core20 20.04 20.04 focal multipass launch focal &amp;ndash;cpus 4 &amp;ndash;disk 20G &amp;ndash;mem 8G &amp;ndash;name rubuntu multipass launch &amp;ndash;cpus 4 &amp;ndash;disk 20G &amp;ndash;mem 8G &amp;ndash;name rubuntu 进入命名为rubuntu的ubuntu shell : multipass shell rubuntu Python3.8及环境安装： 3.10安装rasa3.0有依赖和编译问题，其他版本未知，使用3.8来安装rasa3.0。 更新软件包列表并安装必备组件: sudo apt update sudo apt -y install software-properties-common sudo apt update #需要注意software-properties-common 有可能会重新安装python3.10，如果重新安装可以再次卸载。 将Deadsnakes PPA添加到系统的来源列表中(一定要在卸载</description>
    </item>
    
    <item>
      <title>njs 5分钟快速入门</title>
      <link>http://tietang.wang/posts/nginx/njs-5%E5%88%86%E9%92%9F%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/</link>
      <pubDate>Tue, 02 Jun 2020 20:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/nginx/njs-5%E5%88%86%E9%92%9F%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/</guid>
      <description>njs 5分钟快速入门 njs是作为nginx的module，可以通过2种方式安装： add-module 编译源码 add-dynamic-module 本文采用add-module编译源码的方式。add-dynamic-module的方法自行百度。 下载 njs-0.4.1 官网提供的源码下载，需要通过hg来获取。hg是 Mercurial 分布式版本控制软件的客户端，国内使用较少，可以通过官网下载 Mercurial 客户端，通过如下命令下载njs源码： hg clone http://hg.nginx.org/njs njs源码仓库参考：http://hg.nginx.org/njs?_ga=2.60091629.1926145332.1591076203-902755521.1590558489 也可以使用git到github上下载njs的代码镜像或者release压缩包。最新的镜像直接下载master分支代码即可： git clone https://github.com/nginx/njs.git 也可以直接下载最新的release压缩包：https://github.com/nginx/njs/releases wget https://github.com/nginx/njs/archive/0.4.1.tar.gz or curl -o https://github.com/nginx/njs/archive/0.4.1.tar.gz njs在github上</description>
    </item>
    
    <item>
      <title>代码架构</title>
      <link>http://tietang.wang/posts/%E6%9E%B6%E6%9E%84/%E4%BB%A3%E7%A0%81%E6%9E%B6%E6%9E%84/</link>
      <pubDate>Sun, 17 Nov 2019 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%9E%B6%E6%9E%84/%E4%BB%A3%E7%A0%81%E6%9E%B6%E6%9E%84/</guid>
      <description>代码架构 在软件开发生命周期中，代码架构很少被提到，但是实际上每一个开发者都在做代码架构。代码架构在软件开发中有着重要的作用，那么我们就来聊聊在软件开发领域中代码架构，从Why、What、How几个方面来讲讲： Why：为什么要做代码架构？ What：代码架构要做些什么事情？ How：怎样来设计代码架构？ Why：为什么要做代码架构？ 软件开发的生命周期，大致都是一样的流程： 需求分析：产出概念模型，需求定义 概要设计：包括系统边界设计、内部架构设计、设计决策 详细设计，包括代码架构，业务逻辑实现 开发代码 单元测试、连通测试 部署上线 系统运维 代码架构属于详细设计部分的内容，代码架构在整个软件开发生命周期中承上启下： 向上要表达设计意图，要把软件产品概念模型、边界交互、数据流设计、数据库设计、系统内部架构设计等表达清楚，来说明业务逻辑和业务领域模型 代码架构本身也是来保证代码有更好的可读性和可维护性、可扩展性，决定了</description>
    </item>
    
    <item>
      <title>央视曝光！超5成文具检出致癌物！这6种毒文具，千万别让孩子用！神兽终于要归笼了！</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E5%A4%AE%E8%A7%86%E6%9B%9D%E5%85%89-%E8%B6%855%E6%88%90%E6%96%87%E5%85%B7%E6%A3%80%E5%87%BA%E8%87%B4%E7%99%8C%E7%89%A9-%E8%BF%996%E7%A7%8D%E6%AF%92%E6%96%87%E5%85%B7%E5%8D%83%E4%B8%87%E5%88%AB%E8%AE%A9%E5%AD%A9%E5%AD%90%E7%94%A8/</link>
      <pubDate>Fri, 18 Oct 2019 21:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E5%A4%AE%E8%A7%86%E6%9B%9D%E5%85%89-%E8%B6%855%E6%88%90%E6%96%87%E5%85%B7%E6%A3%80%E5%87%BA%E8%87%B4%E7%99%8C%E7%89%A9-%E8%BF%996%E7%A7%8D%E6%AF%92%E6%96%87%E5%85%B7%E5%8D%83%E4%B8%87%E5%88%AB%E8%AE%A9%E5%AD%A9%E5%AD%90%E7%94%A8/</guid>
      <description>央视曝光！超5成文具检出致癌物！这6种毒文具，千万别让孩子用！神兽终于要归笼了！ 开学日期近在眼前，孩子的作业费尽九牛二虎之力也终于补完。 老母亲喜滋滋地前往超市购买食材，想着给孩子做上一顿美餐，给这个暑假画上一个完美句点。 结果刚到超市，我人就傻眼了。 文具区人山人海的父母们，瞬间让我的灵魂一颤：糟了！还没给家里的神兽准备新学期的文具！ 回过神来，我也跟随着人流奔向文具区，结果却被这琳琅满目的高颜值文具看花了眼：卡通形象的卷笔刀、五颜六色的荧光笔、形式各异的涂改液、还有书皮、笔袋、文具袋&amp;hellip;&amp;hellip; 差点顶不住诱惑的老母亲，想想经不起挥霍的钱包，瞬间冷静了下来。算了，还是先撤为妙，回家征求下孩子的意见，备下一份文具清单，我们从头再战。 只不过，回家研究一番后，我才发现，原来小小的文具，也有大大的学问。 尤其是这些常见的毒文具，真的伤孩子太深！ 1 毒文具防不胜防，你家孩子有在用吗？ 孩子的</description>
    </item>
    
    <item>
      <title>现在多数孩子染上白血病，医生：少给孩子买这3类文具？</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85-%E5%B0%91%E7%BB%99%E5%AD%A9%E5%AD%90%E4%B9%B0%E8%BF%993%E7%B1%BB%E6%96%87%E5%85%B7/</link>
      <pubDate>Thu, 17 Oct 2019 21:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85-%E5%B0%91%E7%BB%99%E5%AD%A9%E5%AD%90%E4%B9%B0%E8%BF%993%E7%B1%BB%E6%96%87%E5%85%B7/</guid>
      <description>现在多数孩子染上白血病，医生：少给孩子买这3类文具 对于孩子的一个安全问题，那么一直也是备受家长重视的，但是还有一些家长因为无知而让孩子面临着比较危险的情况。 在最近的几年，那么有一些数据就会显示儿童发生意外事故的情况真的是非常的严重，儿童患病率也是在不断的增大，看到这里那么各位父母是不是应该要反思自己呢？是否真正地对孩子尽到了应有的责任，真正的保护了孩子免受 染上了白血病的儿童也是非常多的，那么医生根据这些孩子总体生活中环境来进行分析，最终得到了这样的一个结论，就是孩子正在使用的文具，可能就是引起白血病的一个根源，所以说这三类问题尽量少给孩子们。 可能引发儿童白血病的文具 1.塑料书皮 有的孩子常用的塑料书皮也就可能会使孩子的健康出现问题，这一种树皮含有大量的，增塑剂和多环芳烃孩子长时间使用也就会引起疾病，导致孩子畸形。 其实不仅是书皮，还有一些孩子常用的塑料文具都含有这两种物质，家长应该要尽量让孩子</description>
    </item>
    
    <item>
      <title>触目惊心：这4类文具容易引起中毒或白血病，千万不能让孩子用</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E8%BF%994%E7%B1%BB%E6%96%87%E5%85%B7%E5%AE%B9%E6%98%93%E5%BC%95%E8%B5%B7%E4%B8%AD%E6%AF%92%E6%88%96%E7%99%BD%E8%A1%80%E7%97%85/</link>
      <pubDate>Thu, 17 Oct 2019 21:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E8%BF%994%E7%B1%BB%E6%96%87%E5%85%B7%E5%AE%B9%E6%98%93%E5%BC%95%E8%B5%B7%E4%B8%AD%E6%AF%92%E6%88%96%E7%99%BD%E8%A1%80%E7%97%85/</guid>
      <description>触目惊心：这4类文具容易引起中毒或白血病，千万不能让孩子用 国家自2008年就对学生用品有了明确的规定，并实施了第一部强制性国家标准《学生用品的安全通用要求》，该标准严格规定甲醛、苯、铅、汞、砷等有害物质的最大限量。但是仍然有不少商家表示，不知道已经实施了《学生用品的安全通用要求》，更不知道文具里面的有害物质会对孩子造成多大的影响。 然而不少学生买了不符合规定的文具，从而导致慢性中毒的情况发生，甚至极易引发白血病！ 期末考试即将临近，刘女士看孩子最近学习特别用功，还特意带着孩子新买了几只圆珠笔，好让孩子多做练习。在挑选圆珠笔时，儿子选中了几只有香味的，当时刘女士并没觉得有什么问题，心想孩子嘛，都喜欢好看好闻的。之后的一段时间，孩子经常说恶心，连饭量也减少了，刘女士以为孩子是肠胃不舒服，就给孩子吃了些胃肠药，症状缓和一些后，就没再放在心上了。不久，儿子在家写作业时突然晕倒，送到医院后，刘女士被告知</description>
    </item>
    
    <item>
      <title>甲醛是什么鬼有什么危害？</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%94%B2%E9%86%9B%E6%98%AF%E4%BB%80%E4%B9%88%E9%AC%BC-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8D%B1%E5%AE%B3/</link>
      <pubDate>Mon, 23 Sep 2019 23:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%94%B2%E9%86%9B%E6%98%AF%E4%BB%80%E4%B9%88%E9%AC%BC-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8D%B1%E5%AE%B3/</guid>
      <description>关键内容： 来源： 甲醛是最常见的室内空气污染毒物，约有三千多种不同建筑材料均含有甲醛[来源请求]，主要来源为纤维板、三夹板、隔音板、保丽龙等装潢材料。 甲醛树脂被用于各种[建筑材料]，包括胶合板、毛毯、隔热材料、木制产品、地板、烟草、装修和装饰材料，且因为甲醛树脂会缓慢持续放出甲醛，因此甲醛成为常见的室内空气污染来源之一。 危害： 长期接触低剂量甲醛可引起慢性呼吸道疾病，引起鼻咽癌、结肠癌、脑瘤、细胞核基因突变等。 接触过甲醛的皮肤可能出现过敏现象，严重者甚至会导致[肝炎 、[肺炎]及[肾脏]损害。 对婴幼儿的孕妇危害更加严重，可导致怀孕期间胎儿停止生长发育，心脑发育不全，严重可导致胎儿畸形和流产等严重后果。 以下摘自维基百科 甲醛（英语：Formaldehyde），化学式HCHO，质量30.03，又称蚁醛，天然存在的有机化合物。无色的刺激性气体，对人眼、鼻等有刺激作用。体积百分比40%的甲醛水溶液称100</description>
    </item>
    
    <item>
      <title>如何预防白血病？</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E5%A6%82%E4%BD%95%E9%A2%84%E9%98%B2%E7%99%BD%E8%A1%80%E7%97%85/</link>
      <pubDate>Mon, 23 Sep 2019 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E5%A6%82%E4%BD%95%E9%A2%84%E9%98%B2%E7%99%BD%E8%A1%80%E7%97%85/</guid>
      <description>第一要素：远离诱因 远离辐射、化学（甲醛、苯类等） 避免劳累 第二要素：维持健康体重 规律性进行身体活动: ➤ 避免不动：每天进行一般身体活动（如走楼梯）、散步等。 ➤ 每周坚持至少150分钟的中度或75分钟的高强度运动，在一周中分散进行。 备注: ➤ 低强度运动：运动时呼吸节奏无明显变化，如轻度家务、慢走、太极拳； ➤ 中强度运动：运动时仍可以说话，如快走、骑车； ➤ 高强度运动：运动时仅可说出少数词语，如爬山、跑步。 注意： 运动量因人而异，不要过度锻炼和高强度运动，过度锻炼就会劳累，就会适得其反。根据自己的体质，以出汗为主，偶尔强度大一点。运动选择空气质量好的天气进行。 第三要素：健康饮食 维持富含水果、蔬菜、全谷物、低红肉、低加工肉类、低糖、低脂的健康饮食。不推荐通过日常服用膳食补充剂来实现癌症控制。 推荐的饮食成分 三分之二（或更多）的蔬菜，水果，全谷物或大豆 三分之一（或更少）的动物蛋白 宜食食物 ➤ 适当补充高热量食物，如巧</description>
    </item>
    
    <item>
      <title>白血病有哪些症状？</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85%E6%9C%89%E5%93%AA%E4%BA%9B%E7%97%87%E7%8A%B6/</link>
      <pubDate>Sun, 22 Sep 2019 15:43:48 +0800</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85%E6%9C%89%E5%93%AA%E4%BA%9B%E7%97%87%E7%8A%B6/</guid>
      <description>尽管并非所有的白血病患者都会出现以下症状，但白血病最常见的表征有： 发烧（Fever） 无法解释的体重或食欲骤降（Unexplained weight or appetite loss） 虚弱或疲累（Weakness or fatigue） 肋骨下方有疼痛或饱腹感（Pain or fullness below the ribs） 呼吸短促（Shortness of breath） 容易淤青（Easy bruising） 夜间盗汗（Night sweats） 以上症状也可能是其它程度较轻疾病的症状，但如果您出现以上任何表征，请立即就医。医生会为您开具两种最常见的白血病检测：全血计数检测（complete blood count test）或骨髓穿刺活检（bone marrow aspiration biopsy）。 白血病易侵袭“一老一小” 白血病是常见的恶性肿瘤，根据年龄发病率可发现，5岁以下和15~20岁间有两个小高峰;40岁以后，随年龄增长发病率逐渐升高，60岁以后属发病高峰年龄。 白血病一般分为急性和慢性两大类。其中，急性白血病常表现为突然高烧、</description>
    </item>
    
    <item>
      <title>白血病病因？</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85%E7%9A%84%E7%97%85%E5%9B%A0/</link>
      <pubDate>Sat, 21 Sep 2019 19:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85%E7%9A%84%E7%97%85%E5%9B%A0/</guid>
      <description>远离辐射、化学（甲醛、苯类等），避免劳累 白血病更多的是诱因的综合，不是单一的诱因，具备2个以上诱因条件就要注意了。 【摘自白血病原因】 白血病多数类型病因不清。辐射暴露、某些化疗或一些化学物质（诸如苯）可以增加某些类型白血病的风险，但受累人群中仅有极少数会出现白血病。某些遗传性疾病，诸如唐氏综合征和范科尼贫血，也增加其风险。有些人患白血病是由染色体异常引起。人类 T 淋巴细胞病毒 1 (human T lymphotropic virus 1, HTLV-1) 与导致艾滋病的病毒类似，它被高度怀疑是一种少见类型的淋巴细胞白血病——T 细胞白血病的病因。埃-巴二氏病毒感染（也可引起单核细胞增多症）与一种侵袭性淋巴细胞白血病——Burkitt 白血病相关。 【摘自来自知乎】 作者：清灵 链接：https://www.zhihu.com/question/26102980/answer/32568940 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 白</description>
    </item>
    
    <item>
      <title>白血病诱因</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84%E8%AF%B1%E5%9B%A0/</link>
      <pubDate>Sat, 21 Sep 2019 19:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E7%99%BD%E8%A1%80%E7%97%85%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84%E8%AF%B1%E5%9B%A0/</guid>
      <description>远离辐射、化学（甲醛、苯类等） 避免劳累。 白血病最常见的也是最容易接触或发生的诱因就是化学因素和劳累。 在化学物质中「苯」是医学界公认的诱发白血病物质，而甲醛、苯乙烯则被国际卫生组织确认为高危致癌物。 白血病更多的是诱因的综合，不是单一的诱因，具备2个以上诱因条件就要注意了。 化学因素诱因最大之一 在我们日常生活中，家庭装修污染、染发、穿衣、家用杀虫剂、汽油等均可能导致血液异常。已经证实甲醛可以导致人发生鼻咽癌。如长期生活在有污染物质的室内，大量吸入有毒物质，将可能诱发血液异常。使用染发剂不当对健康不利，染发剂中的苯二胺等有毒物质，可以在染发时经过皮肤吸收在体内蓄积，引起DNA损伤和细胞突变。临床上见一些白血病等血液疾病患者有多年染发的既往史。有染发史的妇女患淋巴瘤的可能性增加70%，发生白血病的可能比不染发的妇女高3.8倍，以致有人提出“染发型白血病”观点。虽然，染发剂引起白血病的问题仍有争论，也</description>
    </item>
    
    <item>
      <title>血常规检查哪些可以排除白血病</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E8%A1%80%E5%B8%B8%E8%A7%84%E6%A3%80%E6%9F%A5%E5%93%AA%E4%BA%9B%E5%8F%AF%E4%BB%A5%E6%8E%92%E9%99%A4%E7%99%BD%E8%A1%80%E7%97%85/</link>
      <pubDate>Sat, 21 Sep 2019 09:20:43 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E8%A1%80%E5%B8%B8%E8%A7%84%E6%A3%80%E6%9F%A5%E5%93%AA%E4%BA%9B%E5%8F%AF%E4%BB%A5%E6%8E%92%E9%99%A4%E7%99%BD%E8%A1%80%E7%97%85/</guid>
      <description>血常规检查哪些可以排除白血病 一般去医院检查身体的话，必不可少的一项检查就是血常规检查，对于因为血液系统出现问题的白血病更是如此了，那么，白血病的血常规化验单应该是什么样的？主要看三项指标！ 白血病是种常见的血液疾病，要想确诊自己到底患没患白血病，必须进行血常规检查，可是不少的人对血常规检查不了解，而白血病的血常规化验单应该是如下内容： 白血病的血常规检查需要空腹抽血化验，大部分是做生化检验的项目，如肝功能、血糖、蛋白质、脂类以及电解质钾、钠、氯等。诊断白血病看血常规化验的时候，最主要看三个指标——白细胞计数、血红蛋白和血小板计数。一般白血病患者都会存在血常规指标异常。 第一：白细胞过多或白细胞减少： 白细胞(WBC)正常值： 成人 (4.0～10.0)×109/L。 新生儿(15.0～20.0)×109/L。 6个月至2岁 (11.0～12.0)×10*9/L。 低于正常值为白细胞减少，可因感染尤其病毒感染、</description>
    </item>
    
    <item>
      <title>什么是白血病【wiki百科的知识】？</title>
      <link>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E4%BB%80%E4%B9%88%E6%98%AF%E7%99%BD%E8%A1%80%E7%97%85-wiki%E7%99%BE%E7%A7%91%E7%9A%84%E7%9F%A5%E8%AF%86/</link>
      <pubDate>Sat, 21 Sep 2019 07:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E7%8C%BF%E5%81%A5%E5%BA%B7/%E4%BB%80%E4%B9%88%E6%98%AF%E7%99%BD%E8%A1%80%E7%97%85-wiki%E7%99%BE%E7%A7%91%E7%9A%84%E7%9F%A5%E8%AF%86/</guid>
      <description>白血病是一类造血干细胞恶性克隆性疾病。克隆性白血病细胞因为增殖失控、分化障碍、凋亡受阻等机制在骨髓和其他造血组织中大量增殖累积，并浸润其他非造血组织和器官，同时抑制正常造血功能。临床可见不同程度的贫血、出血、感染发热以及肝、脾、淋巴结肿大和骨骼疼痛。据报道，我国各地区白血病的发病率在各种肿瘤中占第六位。 什么是白血病？ 白血病（拉丁语：leukemia，/luːˈkiːmiːə/[1]）是一群癌症种类的统称，英文名称来自于古希腊语，λευκός（leukos，白色）与αἷμα（haima，血液）的组合[2]。 它通常发病于骨髓，造成不正常白血球的大量增生[3]。这些异常增加的白血球都尚未发育完成，称之为芽细胞或白血病细胞[4]。症状可能包含：出血与淤斑、疲倦以及感染风险增加[4]。这些症状会因缺乏正常血球而发生[[4]](https://zh.wikipedia.org/wiki/白血病#cit</description>
    </item>
    
    <item>
      <title>业务中台的思考</title>
      <link>http://tietang.wang/posts/paas/%E4%B8%9A%E5%8A%A1%E4%B8%AD%E5%8F%B0%E7%9A%84%E6%80%9D%E8%80%83/</link>
      <pubDate>Thu, 19 Sep 2019 09:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/paas/%E4%B8%9A%E5%8A%A1%E4%B8%AD%E5%8F%B0%E7%9A%84%E6%80%9D%E8%80%83/</guid>
      <description>&amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; 大业务中台 小业务中台 &amp;mdash; 生态中台 原子业务中台 说明 提供全业务中心视图和能力 提供底层抽象通用的业务能力 提供全面的业务和技术解决方案的能力 提供基础业务和技术解决方案的能力 Core Service</description>
    </item>
    
    <item>
      <title>四色建模法-红包业务运用</title>
      <link>http://tietang.wang/posts/%E6%9E%B6%E6%9E%84/%E5%BB%BA%E6%A8%A1/%E7%BA%A2%E5%8C%85%E4%B8%9A%E5%8A%A1%E4%B8%AD%E5%9B%9B%E8%89%B2%E5%BB%BA%E6%A8%A1%E6%B3%95%E7%94%A8%E4%BE%8B%E5%88%86%E6%9E%90/</link>
      <pubDate>Tue, 17 Sep 2019 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%9E%B6%E6%9E%84/%E5%BB%BA%E6%A8%A1/%E7%BA%A2%E5%8C%85%E4%B8%9A%E5%8A%A1%E4%B8%AD%E5%9B%9B%E8%89%B2%E5%BB%BA%E6%A8%A1%E6%B3%95%E7%94%A8%E4%BE%8B%E5%88%86%E6%9E%90/</guid>
      <description>红包场景概述 红包业务场景主要用例就2个：发红包和收红包。 红包指的是具备固定数量固定总金额的大红包，每个大红包由固定数量的小红包组成，每个小红包金额一样或者不一样，但所有小红包的金额之和和大红包总金额必须保持一致，红包实际上是一个具备虚拟资金特征的特殊商品。 发红包和收红包实际上是金融商品的交易过程，红包是一种虚拟资金商品，会涉及到用户资金资产，资金资产指的是用户的钱包账户。 发红包过程是，红包发放者从系统虚拟资金中间商那里购买虚拟资金商品也就是红包，并支付红包总金额给系统虚拟资金中间商，然后将购买的红包赠送给目标人群，赠送过程相当于商品发布，目标人群可以是某个人，也可以是某一群人，所以发红包过程涉及到下单，支付、赠送。 收红包过程类似商品的秒杀活动，不一样的是用户不需要支付商品价格，用户点击红包链接，进入抢红包流程，如果抢到红包，直接到系统虚拟资金中间商那里兑换红包面值，系统虚拟资金中间商将面值</description>
    </item>
    
    <item>
      <title>JS 流程图</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/js-flowchart-diagrams/</link>
      <pubDate>Tue, 17 Sep 2019 21:57:50 +0800</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/js-flowchart-diagrams/</guid>
      <description>&lt;h2 id=&#34;用法&#34;&gt;用法&lt;/h2&gt;
&lt;p&gt;转载自https://blog.olowolo.com/example-site/post/js-flowchart-diagrams/&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;st=&amp;gt;start: Start|past:&amp;gt;http://www.google.com[blank]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;e=&amp;gt;end: End:&amp;gt;http://www.google.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;op1=&amp;gt;operation: My Operation|past
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;op2=&amp;gt;operation: Stuff|current
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sub1=&amp;gt;subroutine: My Subroutine|invalid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cond=&amp;gt;condition: Yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;or No?|approved:&amp;gt;http://www.google.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c2=&amp;gt;condition: Good idea|rejected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;io=&amp;gt;inputoutput: catch something...|request
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;st-&amp;gt;op1(right)-&amp;gt;cond
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cond(yes, right)-&amp;gt;c2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cond(no)-&amp;gt;sub1(left)-&amp;gt;op1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c2(yes)-&amp;gt;io-&amp;gt;e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c2(no)-&amp;gt;op2-&amp;gt;e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>JS 序列图</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/js-sequence-diagrams/</link>
      <pubDate>Tue, 17 Sep 2019 21:57:45 +0800</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/js-sequence-diagrams/</guid>
      <description>&lt;p&gt;转载自：https://blog.olowolo.com/example-site/post/js-sequence-diagrams/&lt;/p&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Andrew-&amp;gt;China: Says Hello
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Note right of China: China thinks\nabout it
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;China--&amp;gt;Andrew: How are you?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Andrew-&amp;gt;&amp;gt;China: I am good thanks!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>四色建模法-四个概念和五个步骤</title>
      <link>http://tietang.wang/posts/%E6%9E%B6%E6%9E%84/%E5%BB%BA%E6%A8%A1/%E5%9B%9B%E8%89%B2%E5%BB%BA%E6%A8%A1%E6%B3%95%E7%9A%84%E5%9B%9B%E4%B8%AA%E6%A6%82%E5%BF%B5%E5%92%8C%E4%BA%94%E4%B8%AA%E6%AD%A5%E9%AA%A4/</link>
      <pubDate>Mon, 16 Sep 2019 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%9E%B6%E6%9E%84/%E5%BB%BA%E6%A8%A1/%E5%9B%9B%E8%89%B2%E5%BB%BA%E6%A8%A1%E6%B3%95%E7%9A%84%E5%9B%9B%E4%B8%AA%E6%A6%82%E5%BF%B5%E5%92%8C%E4%BA%94%E4%B8%AA%E6%AD%A5%E9%AA%A4/</guid>
      <description>四色建模法 四个概念概述： ”四色原型“模式，根据名字我们就可以大概猜出它是基于四个概念来分析我们的业务概念，下面我们来了解一下哪四个概念： 时标性对象：这在四色建模中最重要也是最难分析的图例，时标性对象指的是业务在在某个时间段内的发生和跟踪的事件，最重要的是2部分内容，1是事件，2是事件所留下的痕迹。比如订单是某个客户在某个时间段内购买了某个商品所发生的业务，也是这个过程留下的唯一证据。此概念就是用来跟踪实体发生的所有需要跟踪的事件。通常时标性对象的生命周期比较短，作用范围也以生命周期内有效，事务、日志类对象就是典型的时标类对象，比如订单、支付记录、操作日志等等。时标性对象使用粉红色来标识。 实体：也可以叫做物品，是业务事件发生过程中的参与者，通常是静态的，生命周期贯穿多次同一类业务，创建后就一直生效，配置性是典型的特征，比如：客户、商品。使用绿色来表示实体（参与者）。 角色：是指实体、时刻时段的</description>
    </item>
    
    <item>
      <title>基于Nginx&amp;Lua 和Netflix Eureka的微服务网关</title>
      <link>http://tietang.wang/posts/nginx/%E5%9F%BA%E4%BA%8Enginx-lua%E5%92%8Cnetflix-eureka%E7%9A%84%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%BD%91%E5%85%B3%E4%BB%8B%E7%BB%8D/</link>
      <pubDate>Sat, 05 Jan 2019 19:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/nginx/%E5%9F%BA%E4%BA%8Enginx-lua%E5%92%8Cnetflix-eureka%E7%9A%84%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%BD%91%E5%85%B3%E4%BB%8B%E7%BB%8D/</guid>
      <description>依赖：lua-resty-http 基于Nginx&amp;amp;Lua 和Netflix Eureka的微服务网关。 重新架构了内部组件，采用插件模式。 服务发现 Eureka Discovery 抽象discovery，用来支持多种服务发现？规划中&amp;hellip; 动态路由 负载均衡 加权轮询 基于响应时间的动态权重轮询？开发中&amp;hellip; 简单监控 隔离降级 限流 metrics 认证安全？规划中。。。 监控页面？开发中&amp;hellip; 架构图： 使用方法 基于Nginx和Lua module。需要安装Nginx Lua环境或者直接下载openresty编译安装。 下载代码到/path/to/nginx/lua/lib/ git clone http://github.com/tietang/ngx-lua-zuul &amp;ndash;depth=1 例子Eureka 服务 如果没有Eureka环境，也可以编译安装本例子中的EurekaDemo服务，参考编译和运行eureka-demo服务中的相关内容。 部署dicovery例子服务： 下载代码后： cd /path/to/ngx_lua-zuul/demo/java mvn clean install 将下载的代码中的lua文件夹放到部署目录/p</description>
    </item>
    
    <item>
      <title>微服务应用性能监控系统演进历程及实践</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7%E6%9E%B6%E6%9E%84%E5%AE%9E%E8%B7%B5/</link>
      <pubDate>Fri, 19 Oct 2018 09:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%BA%94%E7%94%A8%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7%E6%9E%B6%E6%9E%84%E5%AE%9E%E8%B7%B5/</guid>
      <description></description>
    </item>
    
    <item>
      <title>golang助力NodeJS前段应用持续集成和部署</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/golang%E5%8A%A9%E5%8A%9B%E5%89%8D%E7%AB%AF%E5%BA%94%E7%94%A8%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E5%92%8C%E9%83%A8%E7%BD%B2/</link>
      <pubDate>Wed, 19 Sep 2018 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/golang%E5%8A%A9%E5%8A%9B%E5%89%8D%E7%AB%AF%E5%BA%94%E7%94%A8%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E5%92%8C%E9%83%A8%E7%BD%B2/</guid>
      <description></description>
    </item>
    
    <item>
      <title>一次线上事故对“本地文件队列异步使用”的思考</title>
      <link>http://tietang.wang/posts/mq/%E4%B8%80%E6%AC%A1%E7%BA%BF%E4%B8%8A%E4%BA%8B%E6%95%85%E5%AF%B9%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E5%BC%82%E6%AD%A5%E9%98%9F%E5%88%97%E7%9A%84%E6%80%9D%E8%80%83/</link>
      <pubDate>Wed, 10 May 2017 18:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/mq/%E4%B8%80%E6%AC%A1%E7%BA%BF%E4%B8%8A%E4%BA%8B%E6%95%85%E5%AF%B9%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E5%BC%82%E6%AD%A5%E9%98%9F%E5%88%97%E7%9A%84%E6%80%9D%E8%80%83/</guid>
      <description>事故描述 事故现象是部分服务http请求无响应。事故从发生到恢复，接近3个小时，事故过程中重启应用服务，只能坚持几分钟到十几分钟，在真正发现问题前通过不断重启服务实例来支撑，庆幸的是核心服务没有出现无响应的事故。 最终分析为AMQ出现故障，现象是MQ客户端sendMessage后等待响应，但一直在等待，AMQ监控端口ok，控制台也可以打开，由于紧急没有具体分析，直接重启AMQ服务，切换master，通过验证服务全部恢复。 这次故障大部分服务都使用了AMQ，但除了一个核心服务没受到明显影响外，其他使用AMQ的服务都不同程度的收到了影响，服务不可用。 此次事故比较严重，就是因为使用了本地文件队列有效隔离故障，使得影响面不大。假设（当然不希望发生了）核心业务没有使用本地文件队列来隔离故障，整个下单、收银服务将不可用，商户无法营业，损失应该在数量级。 此次事故也证明了我当时的这个架构思路的正确性，主要体现在</description>
    </item>
    
    <item>
      <title>本地文件队列-异步隔离架构</title>
      <link>http://tietang.wang/posts/mq/%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E9%98%9F%E5%88%97-%E5%BC%82%E6%AD%A5%E9%9A%94%E7%A6%BB/</link>
      <pubDate>Wed, 10 May 2017 18:00:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/mq/%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E9%98%9F%E5%88%97-%E5%BC%82%E6%AD%A5%E9%9A%94%E7%A6%BB/</guid>
      <description>常见的异步方式： 创建异步线程 每个新创建一个线程来执行异步任务，任务结束线程也终止。 线程的创建成本比较大，不建议使用。 使用Queue，producer/consumer方式 在内部创建一个Queue，worker线程直接将异步处理的任务放入queue，一个或多个异步线程从queue中消费并执行任务。 线程池 用线程池来替换每次创建线程，减少线程创建的成本，线程被复用，一次创建多处使用。 和使用Queue类似，也是通过BlockingQueue实现,但策略上更复杂，向线程池提交Callable&amp;amp;Runnable任务，由线程池调度执行。 参考：java.util.concurrent.ThreadPoolExecutor#execute spring @Async注解 通过注解来来简化了异步编程，只需要在需要异步的方法上使用@Async注解即可。 其本质也是在线程池功能上扩展的，将异步执行方法封装为一个Callab</description>
    </item>
    
    <item>
      <title>JDBC如何开启事务</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/jdbc%E5%A6%82%E4%BD%95%E5%BC%80%E5%90%AF%E4%BA%8B%E5%8A%A1/</link>
      <pubDate>Mon, 10 Apr 2017 18:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/jdbc%E5%A6%82%E4%BD%95%E5%BC%80%E5%90%AF%E4%BA%8B%E5%8A%A1/</guid>
      <description>面试了很多人，每每问到“JDBC如何开启一个事务？”，大部分人的回答是：“通过openTransaction方法”，有的说是通过Connection，有的是说通过Statement，更有的说通过Connection拿到一个Transaction实例，再通过openTransaction方法来开启，那么同样关闭事务就有close方法“closeTransaction”。 想必这些人都是被“hibernate”害了还是“不注重java基础”，一上来就被框架误导呢？ 先看看一个标准的JDBC例子伪代码： 1 2 3 4 5 6 7 8 9 10 11 12 13 Connection conn = DriverManager.getConnection(...); try{ con.setAutoCommit(false); Statement stmt = con.createStatement(); //1 or more queries or updates con.commit(); }catch(Exception e){ con.rollback(); }finally{ con.close(); } 所以，看到上面的例子，开启手动事务的关键是con.setAutoCommit(false)，JDBC事务默认是开启的，并且是自动提交： 关闭自动提交：java.sql.Connection.setAutoCommit(false) s</description>
    </item>
    
    <item>
      <title>安装Nginx Lua环境</title>
      <link>http://tietang.wang/posts/nginx/%E5%AE%89%E8%A3%85nginxlua%E6%A8%A1%E5%9D%97/</link>
      <pubDate>Sun, 27 Nov 2016 19:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/nginx/%E5%AE%89%E8%A3%85nginxlua%E6%A8%A1%E5%9D%97/</guid>
      <description>安装Nginx Lua模块 环境准备： $ yum -y install pcre-devel $ yum -y install openssl openssl-devel 下载所需文件 亦可参考官方安装指南：lua-nginx-module Installation 这是我总结的安装，供参考： 需要最新版的Nginx，LuaJIT，ngx_devel_kit，lua-nginx-module等安装文件: Nginx LuaJIT Lua或者LuaJIT都是可以的，但是出于性能的考虑，推荐安装LuaJIT ngx_devel_kit lua-nginx-module 参考命令下载： $ curl -O http://nginx.org/download/nginx-1.10.1.tar.gz $ curl -O http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz $ curl -L -O https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz $ curl -L -O https://github.com/openresty/lua-nginx-module/archive/v0.10.5.tar.gz 安装LuaJIT $ wget http://luajit.org/download/LuaJIT-.tar.gz $ tar zxvf LuaJIT-.tar.gz $ cd LuaJIT- $ make $ sudo make install 编译安装lua-nginx-module 1 2 3 4 5 6 7 8 export LUAJIT_LIB=/usr/local/lib export LUAJIT_INC=/usr/local/include/luajit-2.1 cd nginx-1.10.1 ./configure --prefix=/opt/nginx --with-ld-opt=&amp;#34;-Wl,-rpath,/usr/local/lib&amp;#34; --add-module=/path/to/ngx_devel_kit-0.3.0 --add-module=/path/to/nginx/lua-nginx-module-0.10.5 make make install 动态module方式 Nginx 1.9.11 开始可以编译module为一个动态module，在执行./configure命令时用&amp;ndash;add-dynamic-module=PATH替换&amp;ndash;add-module=PATH。编译后可以在nginx.conf配置中使用 load_module 来动态加载这个</description>
    </item>
    
    <item>
      <title>标签</title>
      <link>http://tietang.wang/js/tagcloud/</link>
      <pubDate>Thu, 24 Nov 2016 15:48:34 +0000</pubDate>
      
      <guid>http://tietang.wang/js/tagcloud/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Hystrix semaphore和thread隔离策略的区别及配置参考</title>
      <link>http://tietang.wang/posts/hystrix/hystrix-semaphore%E5%92%8Cthread%E9%9A%94%E7%A6%BB%E7%9A%84%E5%8C%BA%E5%88%AB/</link>
      <pubDate>Fri, 18 Nov 2016 19:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/hystrix/hystrix-semaphore%E5%92%8Cthread%E9%9A%94%E7%A6%BB%E7%9A%84%E5%8C%BA%E5%88%AB/</guid>
      <description>Hystrix semaphore和thread隔离策略的区别及配置参考 通用设置说明 Hystrix所有的配置都是hystrix.command.[HystrixCommandKey]开头,其中[HystrixCommandKey]是可变的，默认是default,即hystrix.command.default；另外Hystrix内置了默认参数，如果没有配置Hystrix属性，默认参数就会被设置，其优先级： hystrix.command.[HystrixCommandKey].XXX hystrix.command.default.XXX Hystrix代码内置属性参数值 Hystrix隔离策略相关的参数 策略参数设置 execution.isolation.strategy= THREAD|SEMAPHORE execution.isolation.thread.timeoutInMilliseconds hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 用来设置thread和semaphore两种隔离策略的超时时间，默认值是1000。 建议设置这个参数，在Hystrix 1.4.0之前，semaphore-isolated隔离策略是不能超时的，从1.4.0开始semaphore-isolated也支持超时时间了。 建议通过CommandKey设置不同微服务的超时时间,对于</description>
    </item>
    
    <item>
      <title>zuul 参数调优</title>
      <link>http://tietang.wang/posts/hystrix/zuu%E5%8F%82%E6%95%B0l%E4%BC%98%E5%8C%96%E5%92%8C%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Thu, 17 Nov 2016 19:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/hystrix/zuu%E5%8F%82%E6%95%B0l%E4%BC%98%E5%8C%96%E5%92%8C%E9%85%8D%E7%BD%AE/</guid>
      <description>zuul 参数调优 适用版本： spring-boot: 1.4.x.RELEASE spring-cloud：Camden.SR3 Hystrix: 1.5.6 spring-boot-tomcat 优化参数： 主要只有2个，最大和最小worker线程： 1 2 server.tomcat.max-threads=128 # Maximum amount of worker threads. server.tomcat.min-spare-threads=64 # Minimum amount of worker threads. spring-boot-undertow 优化参数： ioThreads 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接,默认取CPU核心数量,最小值为2。 Math.max(Runtime.getRuntime().availableProcessors(), 2); spring-boot 参数：server.undertow.io-threads= worker-threads 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载，默认值为io-threads*8。 spring-boot 参数：server.undertow.worker-threads= buffer buffer-size: 每块buffer的空间大小,越小的空间被利用越充分。 **buffers-per-region: ** 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region。 directBuffers 是否分配的直接内存。 获取JVM最大可用内存maxMemory=</description>
    </item>
    
    <item>
      <title>Maxwell MySQL binlog订阅和一些坑</title>
      <link>http://tietang.wang/posts/binlog/maxwell-mysql-binlog%E8%AE%A2%E9%98%85%E5%92%8C%E4%B8%80%E4%BA%9B%E5%9D%91/</link>
      <pubDate>Wed, 09 Nov 2016 19:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/binlog/maxwell-mysql-binlog%E8%AE%A2%E9%98%85%E5%92%8C%E4%B8%80%E4%BA%9B%E5%9D%91/</guid>
      <description>maxwell 相关资源 http://maxwells-daemon.io/ https://github.com/zendesk/maxwell https://github.com/zendesk/open-replicator 配置MySQL master数据源 1 2 3 4 [mysqld] server-id=1 log-bin=master binlog_format=row 注意： MySQL必须开启了binlogs，即log-bin指定了目录 binlog_format必须是row master数据源配置REPLICATION权限： Maxwell需要储存他自己的一些状态数据，启动参数schema_database选型来指定，默认是maxwell. 1 2 GRANT ALL on maxwell.* to &amp;#39;maxwell&amp;#39;@&amp;#39;%&amp;#39; identified by &amp;#39;123456&amp;#39;; GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to &amp;#39;maxwell&amp;#39;@&amp;#39;%&amp;#39;; 问题列表 当binlog文件不存在时（被删除、移除、过期） 无法启动maxwell 正在运行的maxwell**可能**会stop 在阿里云RDS下的风险问题 binlog文件清理问题 binlog文件名在切换master主备或者阿里运维维护时会重置 RDS for MySQL 的 Binlog 生成和清理规则： 参考：RDS for MySQL 之 Binlog 日志生成和清理规则 其他问题 阿里RDS的binlog在被复制完成后，会将之前的最后的binlog文件复制到其他地方，如果maxwell挂起时</description>
    </item>
    
    <item>
      <title>RestTemplate遇上Hystrix</title>
      <link>http://tietang.wang/posts/hystrix/resttemplate%E9%81%87%E4%B8%8Ahystrix/</link>
      <pubDate>Fri, 02 Sep 2016 09:20:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/hystrix/resttemplate%E9%81%87%E4%B8%8Ahystrix/</guid>
      <description>RestTemplate遇上Hystrix RestTemplate集成Hystrix和Robbin 查看RestTemplate源代码，可以看到RestTemplate继承了InterceptingHttpAccessor类，InterceptingHttpAccessor类通过ClientHttpRequestInterceptor接口提供了扩展功能。 实现intercept方法，在该方法中封装HystrixCommand和Ribbon逻辑即可。 下面的代码是集成了HystrixCommand的例子： 1 2 3 4 5 6 7 8 9 10 11 12 13 @Override public ClientHttpResponse intercept( final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException { final URI originalUri = request.getURI(); String serviceName = mapCommandKey(originalUri); log.info(&amp;#34;{} :{} {} &amp;#34;, serviceName, request.getMethod().name(), originalUri.toString()); return new RestTemplateHystrixCommnad(serviceName, () -&amp;gt; { return execution.execute(request, body); }, hystrixFallback).execute(); } 下面是集成了HystrixCommand和Ribbon的例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override public ClientHttpResponse intercept( final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) throws IOException { final URI originalUri = request.getURI(); String serviceName = mapCommandKey(originalUri); log.info(&amp;#34;{} :{} {} &amp;#34;, serviceName, request.getMethod().name(), originalUri.toString()); return new RestTemplateHystrixCommnad(serviceName, () -&amp;gt; { return this.loadBalancer.execute(serviceName, instance -&amp;gt; { HttpRequest</description>
    </item>
    
    <item>
      <title>软件开发中的单一职责</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E4%B8%AD%E7%9A%84%E5%8D%95%E4%B8%80%E8%81%8C%E8%B4%A3/</link>
      <pubDate>Tue, 28 Jun 2016 09:06:33 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E4%B8%AD%E7%9A%84%E5%8D%95%E4%B8%80%E8%81%8C%E8%B4%A3/</guid>
      <description>软件开发中的单一职责 最近在实践微服务化过程中，对其“单一职责”原则深有体会。 那么只有微服务化才可以单一职责，才可以解耦吗？答案是否定的。 单一职责原则是这样定义的：单一的功能，并且完全封装起来。 我们做后端Java开发的，应该最熟悉的就是标准的3层架构了，尤其是使用Spring.io体系的：Controller，Service，Dao/Repository。为什么要分层？就是为了保证单一职责，数据模型的事情交给Controller，业务逻辑的事情交给Service，和数据打交道的事情就交给Dao/Repository。有时候或者有些人会分层分的更多，4层，5层，我自己也这样干过，说白了也是为了保证单一职责，3层不能满足单一职责了，耦合度高了，就分。 我们都知道一个webapp在经过一定时间的开发后，就惨不忍睹，即便是有标准的分层，页面或模板文件一大堆，最初的很清晰的3层标准架构也变味了，Cont</description>
    </item>
    
    <item>
      <title>负载均衡之加权轮询算法</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E4%B9%8B%E5%8A%A0%E6%9D%83%E8%BD%AE%E8%AF%A2%E7%AE%97%E6%B3%95/</link>
      <pubDate>Thu, 16 Jun 2016 09:06:33 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E4%B9%8B%E5%8A%A0%E6%9D%83%E8%BD%AE%E8%AF%A2%E7%AE%97%E6%B3%95/</guid>
      <description>负载均衡之加权轮询算法 算法举例说明 服务实例 权重 127.0.0.1:8001 1 127.0.0.1:8002 2 127.0.0.1:8003 3 共有三个实例，总权重为6，那么实现效果应该为每调用6次： 每个实例应该被调用权重次数 权重数大的优先被调用 根据以上说明，那么进行排列组合： 先按照权重大小排序 把权重数做为调用次数排列 排列的结果是这样的： 序号 服务实例 权重 1 127.0.0.1:8003 3 2 127.0.0.1:8003 3 3 127.0.0.1:8003 3 4 127.0.0.1:8002 2 5 127.0.0.1:8002 2 6 127.0.0.1:8001 1 貌似没问题，但每个实例调用不是交替的，分布不够均匀，改进一下重新排列组合： 序号 服务实例 权重 1 127.0.0.1:8003 3 2 127.0.0.1:8002 2 3 127.0.0.1:8003 3 4 127.0.0.1:8002 2 5 127.0.0.1:8003 3 6 127.0.0.1:8001 1 或者 序号 服务实例 权重 1 127.0.0.1:8003 3 2 127.0.0.1:8002 2 3 127.0.0.1:8003 3 4 127.0.0.1:8001 1 5 127.0.0.1:8003 3 6 127.0.0.1:8002 2 2个权重变量：weight，current_weight weight 配置的固定不变的权重 current_weight 会动态调整的权重，初始化为0，运行时动态调整。 选取开始时，先重新调整current_weight= current_weight+weight，然后通过current_weight值从大到小排序，选择current_weight值最大</description>
    </item>
    
    <item>
      <title>Hystrix简介</title>
      <link>http://tietang.wang/posts/hystrix/hystrix%E7%AE%80%E4%BB%8B/</link>
      <pubDate>Wed, 09 Mar 2016 09:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/hystrix/hystrix%E7%AE%80%E4%BB%8B/</guid>
      <description>What Is Hystrix? What Is Hystrix For? What Problem Does Hystrix Solve? What Design Principles Underlie Hystrix? How Does Hystrix Accomplish Its Goals? 在分布式环境中，不可避免的有许多服务依赖，而且有时候一些服务会失败。Hystrix library通过添加延迟容忍和容错逻辑来控制分布式服务之间的相互影响。Hystrix通过服务之间访问的隔离点阻止连锁故障，并提供了失败回退机制（fallback），来改进系统服务的弹性。 Hystrix的历史 Hystrix是在2011年由Netflix API 团队的弹性工程演变而来。在2012年，Hystrix日益完善和成熟，在Netflix的许多团队也开始采用。现在，在Netflix，每天有成千上万的线程隔离和数百亿的信号隔离被调用执行。这已经在可用性和弹性上产生了很大的改进。 下面的链接提供了围绕Hystrix和挑战，试图解决： “Making Netflix API More Resilient” “Fault Tolerance in a High Volume, Distributed System” “Performance and Fault Tolerance for the Netflix API” “Applicati</description>
    </item>
    
    <item>
      <title>Hystrix降级模式总结</title>
      <link>http://tietang.wang/posts/hystrix/hystrix%E9%99%8D%E7%BA%A7%E6%A8%A1%E5%BC%8F%E6%80%BB%E7%BB%93/</link>
      <pubDate>Wed, 09 Mar 2016 09:22:47 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/hystrix/hystrix%E9%99%8D%E7%BA%A7%E6%A8%A1%E5%BC%8F%E6%80%BB%E7%BB%93/</guid>
      <description>失败回退降级模式 失败回退需要实现HystrixCommand.getFallback方法或者HystrixObservableCommand. HystrixObservableCommand()方法。 快速失败Fail Fast 如果业务异常，就抛出一个异常 静默失败Fail Silent 失败时返回一个空response或者移除业务功能，例如返回null，空字符串，空map，空list等 Fallback: Static 失败时，返回默认值来替代引起失败的原因 Fallback: Stubbed 返回替代值，还没理解 Fallback: Cache via Network 当后端服务失败时，从网络缓存获取返回值 Primary + Secondary with Fallback 故障转移，当主服务失败时，调用从服务。当从服务也失败时结合其他模式 Client Doesn’t Perform Network Access * Get-Set-Get with Request Cache Invalidation</description>
    </item>
    
    <item>
      <title>wrk基准测试工具安装使用</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E5%B7%A5%E5%85%B7/wrk%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8/</link>
      <pubDate>Fri, 04 Mar 2016 09:06:33 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E5%B7%A5%E5%85%B7/wrk%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8/</guid>
      <description>git https://github.com/wg/wrk git clone https://github.com/wg/wrk.git 安装 在makefile中33行 LDIR = deps/luajit/src LIBS := -lluajit $(LIBS) CFLAGS += -I$(LDIR) LDFLAGS += -L$(LDIR) 下面添加： LDFLAGS += -L/usr/local/opt/openssl/lib CFLAGS += -I/usr/local/opt/openssl/include make 基本使用 Basic Usage wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html This runs a benchmark for 30 seconds, using 12 threads, and keeping 400 HTTP connections open. Output: 1 2 3 4 5 6 7 8 Running 30s test @ http://127.0.0.1:8080/index.html 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 635.91us 0.89ms 12.92ms 93.69% Req/Sec 56.20k 8.07k 62.00k 86.54% 22464657 requests in 30.00s, 17.76GB read Requests/sec: 748868.53 Transfer/sec: 606.33MB 参数说明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ wrk Usage: wrk &amp;lt;options&amp;gt; &amp;lt;url&amp;gt; Options: -c, --connections &amp;lt;N&amp;gt; Connections to keep open -d, --duration &amp;lt;T&amp;gt; Duration of test -t, --threads &amp;lt;N&amp;gt; Number of threads to use -s, --script &amp;lt;S&amp;gt; Load Lua script file -H, --header &amp;lt;H&amp;gt; Add header to request --latency Print latency statistics --timeout &amp;lt;T&amp;gt; Socket/request timeout -v, --version Print version details Numeric arguments may include a SI unit (1k, 1M, 1G) Time arguments may include a time unit (2s, 2m, 2h)</description>
    </item>
    
    <item>
      <title>Hystrix 参数详解</title>
      <link>http://tietang.wang/posts/hystrix/hystrix%E5%8F%82%E6%95%B0%E8%AF%A6%E8%A7%A3/</link>
      <pubDate>Thu, 25 Feb 2016 09:20:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/hystrix/hystrix%E5%8F%82%E6%95%B0%E8%AF%A6%E8%A7%A3/</guid>
      <description>hystrix.command.default和hystrix.threadpool.default中的default为默认CommandKey Command Properties Execution相关的属性的配置： hystrix.command.default.execution.isolation.strategy 隔离策略，默认是Thread, 可选Thread｜Semaphore thread 通过线程数量来限制并发请求数，可以提供额外的保护，但有一定的延迟。一般用于网络调用 semaphore 通过semaphore count来限制并发请求数，适用于无网络的高并发请求 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 命令执行超时时间，默认1000ms hystrix.command.default.execution.timeout.enabled 执行是否启用超时，默认启用true hystrix.command.default.execution.isolation.thread.interruptOnTimeout 发生超时是是否中断，默认true hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests 最大并发请求数，默认10，该参数当使用ExecutionIsolationStrategy.SEMAPHORE策略时才有效。如果达到最大并发请求数，请求会被拒绝。理论上选择semaphore size的原则和选择thread size一致，但选用semaphore时每次执行的单元要比</description>
    </item>
    
    <item>
      <title>Matthew Lien-Bleeding Wolves</title>
      <link>http://tietang.wang/posts/music/matthew-lien-bleeding-wolves/</link>
      <pubDate>Mon, 22 Feb 2016 13:22:54 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/music/matthew-lien-bleeding-wolves/</guid>
      <description> </description>
    </item>
    
    <item>
      <title>装载：HTTP2.0的奇妙日常</title>
      <link>http://tietang.wang/posts/%E8%BD%AC%E8%BD%BD/http2.0/%E8%A3%85%E8%BD%BDhttp2-0%E7%9A%84%E5%A5%87%E5%A6%99%E6%97%A5%E5%B8%B8/</link>
      <pubDate>Mon, 22 Feb 2016 09:57:03 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E8%BD%AC%E8%BD%BD/http2.0/%E8%A3%85%E8%BD%BDhttp2-0%E7%9A%84%E5%A5%87%E5%A6%99%E6%97%A5%E5%B8%B8/</guid>
      <description>转载自AlloyTeam：http://www.alloyteam.com/2015/03/http2-0-di-qi-miao-ri-chang/ “多年没见，你的女神后来什么样了”晨伯总是这么八卦我的女神，而不是我。 “我给你一个表情，你自己体会一下” “你先写个小页面给我看看吧，我指导一下你吧。”晨伯一幅很吊的样子。 但是这样的小case当然难不了我，虽然多年没碰web，但是我当年可以是AlloyTeam的成员啊。很快我就啪啪啪地完成了页面。晨伯看完我写的页面，一幅“我可是有女朋友的男人”的表情，感叹了一句“现在是HTTP2.0的时代啦，给你普及一下知识点”。 HTTP2.0性能增强的核心：二进制分帧 HTTP 2.0最大的特点： 不会改动HTTP 的语义，HTTP 方法、状态码、URI 及首部字段，等等这些核心概念上一如往常，却能致力于突破上一代标准的性能限制，改进传输性能，实现低延迟和高吞吐量。而之所以叫2</description>
    </item>
    
    <item>
      <title>Hexo命令速记</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/hexo/hexo%E5%91%BD%E4%BB%A4%E9%80%9F%E8%AE%B0/</link>
      <pubDate>Sun, 21 Feb 2016 22:31:12 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/hexo/hexo%E5%91%BD%E4%BB%A4%E9%80%9F%E8%AE%B0/</guid>
      <description>简写 1 2 3 4 5 hexo n &amp;#34;我的博客&amp;#34; == hexo new &amp;#34;我的博客&amp;#34; #新建文章 hexo p == hexo publish hexo g == hexo generate#生成 hexo s == hexo server #启动服务预览 hexo d == hexo deploy#部署 服务器 1 2 3 4 5 6 7 8 9 hexo server #Hexo 会监视文件变动并自动更新，您无须重启服务器。 hexo server -s #静态模式 hexo server -p 5000 #更改端口 hexo server -i 192.168.1.1 #自定义 IP hexo clean #清除缓存 网页正常情况下可以忽略此条命令 hexo g #生成静态网页 hexo d #开始部署 hexo d -g #部署前先生成今天网页 监视文件变动 1 2 hexo generate #使用 Hexo 生成静态文件快速而且简单 hexo generate --watch #监视文件变动 完成后部署 1 2 3 4 5 两个命令的作用是相同的 hexo generate --deploy hexo deploy --generate hexo deploy -g hexo server -g 模版 1 2 3 4 5 6 7 8 9 hexo new &amp;#34;postName&amp;#34; #新建文章 hexo new page &amp;#34;pageName&amp;#34; #新建页面 hexo generate #生成静态页面至public目录 hexo server #开启预览访问端口（默认端口4000，&amp;#39;ctrl + c&amp;#39;关闭server） hexo deploy #将.deploy目录部署到GitHub hexo new [layout] &amp;lt;title&amp;gt; hexo new photo &amp;#34;My Gallery&amp;#34; hexo new &amp;#34;Hello</description>
    </item>
    
    <item>
      <title>领域模型的价值</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B%E7%9A%84%E4%BB%B7%E5%80%BC/</link>
      <pubDate>Sun, 21 Feb 2016 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B%E7%9A%84%E4%BB%B7%E5%80%BC/</guid>
      <description>价值 提供什么服务： 什么来体现服务：运行方式，运行过程和业务逻辑 提供的质量：如何服务，要做的事情 传统数据库为中心 业务逻辑在数据库上，结合系统代码来保证业务逻辑的实现。 以数据库为中心的开发如何的OO﹐如何多的设计模式﹐架构体系如何优美﹐它始终离不开数据库。 OO|面向对象 表现点则是直接在对象本身上﹐在于对象之间真正的交互过程﹐结果也是保留在对象的属性和对象与对象的关系中 逻辑直接存在于对象上﹐这与现实情况是吻合的。 领域模型是一种思维﹐是一种方法,是在系统分析阶段使用﹐而不是在代码中进行纯设计时的工具。不是为了OO而领域﹐不是为了最终要新增数据库而领域。在没有理解领域模型本质时，任何编码都得不到收益。 在分析或架构一个系统时，要得出系统的服务和服务场景，即user case。 领域模型的特点 领域模型是对具有某个边界的领域的一个抽象，反映了领域内用户业务需求的本质；领域模型是有边界的，只反应了我们在领域内所</description>
    </item>
    
    <item>
      <title>FlatBuffers 使用指南</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/flatbuffers/flatbuffers%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link>
      <pubDate>Fri, 19 Feb 2016 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/flatbuffers/flatbuffers%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid>
      <description>FlatBuffers 使用指南 FlatBuffers序列化性能是protobuf的2倍，但size也是protobuf的2倍 编译源码 1 2 3 $ git clone https://github.com/google/flatbuffers.git #切换到最新release版本 $ git checkout v1.2.0 安装cmake http://www.cmake.org. 1 2 3 4 for mac osx $ brew install cmake for centOS $ sudo yum install cmake 用cmake构建project 1 2 3 cmake -G &amp;#34;Unix Makefiles&amp;#34; cmake -G &amp;#34;Visual Studio 10&amp;#34; cmake -G &amp;#34;Xcode&amp;#34; 在*nix系统，mac osx系统也建议使用 cmake -G &amp;quot;Unix Makefiles&amp;quot;，生成Makefile,之后make &amp;amp; make install 编译生成flatc并安装到系统。 1 2 3 $ cmake -G &amp;#34;Unix Makefiles&amp;#34; $ make $ make insall 使用schema编译器flatc来生成基础代码 1 2 3 $ cd samples #在目录src中生成java代码 $flatc -j -o src monster.fbs 编程语言参数: &amp;ndash;cpp, -c : Generate a C++ header for all definitions in this file (as filename_generated.h). &amp;ndash;java, -j : Generate Java code. &amp;ndash;csharp, -n : Generate C# code. &amp;ndash;go, -g : Generate Go code. &amp;ndash;python, -p: Generate Python code. &amp;ndash;javascript, -s: Generate JavaScript code. &amp;ndash;php: Generate PHP code. 其他常用选项： -o PATH 指定源码输出目录 -I PATH 有include语句时，指定include目录 完整的参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22</description>
    </item>
    
    <item>
      <title>FlatBuffers简介</title>
      <link>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/flatbuffers/flatbuffers%E7%AE%80%E4%BB%8B/</link>
      <pubDate>Fri, 19 Feb 2016 20:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%8A%80%E6%9C%AF/flatbuffers/flatbuffers%E7%AE%80%E4%BB%8B/</guid>
      <description>FlatBuffers简介 代码：https://github.com/google/flatbuffers/ 文档：http://google.github.io/flatbuffers/ FlatBuffers是一个开源的、跨平台的、高效的、提供了C++/Java接口的序列化工具库。它是Google专门为游戏开发或其他性能敏感的应用程序需求而创建。 允许在不解析和解包就可以直接访问序列化数据，而且仍然很好地向上和向下兼容，这意味着序列化对象可以多版本共存。 支持的操作系统 Android Windows MacOS X Linux 目前支持的编程语言 C++ C# Go Java JavaScript PHP Python and many more in progress&amp;hellip; 为什么要用FlatBuffers? 对序列化数据的访问不需要打包和拆包——它将序列化数据存储在缓存中，这些数据既可以存储在文件中，又可以通过网络原样传输，而没有任何解析开销； 内存效率和速度——访问数据时的唯一内存需求就是缓冲区，不需要额外的内存分配。 这里可查看详细的基准测试； 扩展</description>
    </item>
    
    <item>
      <title>春天开篇</title>
      <link>http://tietang.wang/posts/%E6%98%A5%E5%A4%A9%E8%8A%B1%E4%BC%9A%E5%BC%80/</link>
      <pubDate>Fri, 19 Feb 2016 09:20:42 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/%E6%98%A5%E5%A4%A9%E8%8A%B1%E4%BC%9A%E5%BC%80/</guid>
      <description>一年之计在于始 想到这句名言时，却不知道出处，也忘记了其他的句子，随即搜了一下，原句如下： “一日之计在于晨,一年之计在于春,一生之计在于勤” 更有： “一年之计在于春,一日之计在于晨,一家之计在于和,一生之计在于勤” 春，晨，和，勤</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/c&#43;&#43;%E6%96%B9%E6%A1%88srs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/c&#43;&#43;%E6%96%B9%E6%A1%88srs/</guid>
      <description>SRS SRS(Simple Realtime Server)是一个简单高效的实时视频服务器，支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。 注意：SRS4已经发布，属于稳定版，可用于生产环境。</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/flutter-ffmpeg/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/flutter-ffmpeg/</guid>
      <description>ffmpeg ffmpeg_cli https://pub.flutter-io.cn/packages/ffmpeg_cli
PLATFORM ANDROID IOS LINUX MACOS WINDOWS
18 LIKES 95 PUB POINTS 72% POPULARITY
last version：0.1.0
ffmpeg https://pub.flutter-io.cn/packages/ffmpeg
PLATFORM ANDROID IOS LINUX MACOS WEB WINDOWS
4 LIKES 100 PUB POINTS 59% POPULARITY
ffmpeg: ^0.0.1
ffmpeg_kit_flutter https://pub.flutter-io.cn/packages/ffmpeg_kit_flutter
PLATFORM ANDROID IOS MACOS
last version： 5.1.0
117 LIKES 120 PUB POINTS 95% POPULARITY
flutter_ffmpeg https://pub.flutter-io.cn/packages/flutter_ffmpeg
iOS and Android.
321 LIKES pending PUB POINTS 95% POPULARITY
last version：0.4.2
WebRTC flutter_webrtc: ^0.9.11 https://pub.flutter-io.cn/packages/flutter_webrtc
ANDROIDIOSMACOSWINDOWS</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/golang-livego/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/golang-livego/</guid>
      <description>livego 简单高效的直播服务器： 安装和使用非常简单； 纯 Golang 编写，性能高，跨平台； 支持常用的传输协议、文件格式、编码格式； 支持的传输协议 RTMP AMF HLS HTTP-FLV 支持的容器格式 FLV TS 支持的编码格式 H264 AAC MP3 macos https://github.com/gwuhaolin/livego 二级制： https://github.com/gwuhaolin/livego/releases 编译安装 git clone https://github.com/gwuhaolin/livego.git cd livego go mod tidy go build 如果出现错误更新系统库即可： go get -u golang.org/x/sys 运行： make run (使用) 启动服务：执行 livego 二进制文件启动 livego 服务； 访问 http://localhost:8090/control/get?room=movie 获取一个房间的 channelkey(channelkey用于推流，movie用于播放). 推流: 通过RTMP协议推送视频流到地址 rtmp://localhost:1935/{appname}/{channelkey} (appname默认是live), 例如： 使用 ffmpeg -re -i demo.flv -c copy -f flv rtmp://localhost:1935/{appname}/{channelkey} 推流(下载demo flv); 播放: 支持多种播放协议，播放地址如下: RTMP:rtmp://localhost:1935/{appname}/movie FLV:http://127.0.0.1:7001/{appname}/movie.flv HLS:http://127.0.0.1:7002/{appname}/movie.m3u8 部署livego并使用OBS调试 我使用的是docker镜像部署，好处是非常节省时间，基本就是安装完docker后一键部署。不过我的个人博客已经使用了服务器的8090端口，因此我把8100端口作为串流端口。 docker run -p 1935:1935 -p 7001:7001 -p 7002:7002 -p 8100:8090 -d gwuhaolin/livego dock</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/golang-webrtc-%E5%8D%8F%E8%AE%AElivekit.io-%E6%96%B9%E6%A1%88/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/golang-webrtc-%E5%8D%8F%E8%AE%AElivekit.io-%E6%96%B9%E6%A1%88/</guid>
      <description>Open source WebRTC infrastructure 全栈解决方案： LiveKit is an open source WebRTC project that gives you everything needed to build scalable and real-time audio, video, and data experiences in your applications. Client SDKs Client SDKs are used to add audio/video functionality to your apps. LiveKit provides official client SDKs for JavaScript, React, iOS/MacOS (Swift), Android (Kotlin), Flutter, Unity (WebGL). React Native is currently in beta. PLATFORM REPO LINKS Web (JS/TS) client-sdk-js docs npm React livekit-react npm iOS client-sdk-swift docs Android client-sdk-android docs maven Flutter client-sdk-flutter docs pub.dev Unity Web client-sdk-unity-web React Native (beta) client-sdk-react-native Current supported features Feature Subscribe/Publish Simulcast Background audio Screen sharing Web 🟢 🟢 🟢 iOS 🟢 🟢 🟢 Android 🟢 🟢 🟢 Mac 🟢 🟢 🟢 Windows 🟢 🟢 🟢 mac os install wget https://github.com/Homebrew/homebrew-core/blob/master/Formula/livekit-cli.rb wget https://github.com/Homebrew/homebrew-core/blob/master/Formula/livekit.rb brew install ./livekit.rb brew install ./livekit-cli.rb start development livekit-server &amp;ndash;dev Creating access token livekit-cli create-token &amp;ndash;api-key devkey &amp;ndash;api-secret secret &amp;ndash;join &amp;ndash;room my-first-room &amp;ndash;identity user1 &amp;ndash;valid-for 24h example: https://example.livekit.io/#/ LiveKitURL：ws://localhost:7880 Token：</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/golang-webrtc%E5%8D%8F%E8%AE%AE-ion%E6%96%B9%E6%A1%88/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/golang-webrtc%E5%8D%8F%E8%AE%AE-ion%E6%96%B9%E6%A1%88/</guid>
      <description>ION is a distributed real-time communication system, the goal is to chat anydevice, anytime, anywhere! Scene conference live-streaming education metaverse OTT more Let&amp;rsquo;s discover ION in less than 5 minutes.</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/licode/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/licode/</guid>
      <description></description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/live/opensource/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/live/opensource/</guid>
      <description>WebRTC社区头部开源项目介绍 WebRTC 开源协议栈实现 libdatachannel c++实现的开源WebRTC协议栈，代码质量比较高，已经有多种语言的binding 关注量：700 https://github.com/paullouisageneau/libdatachannel node-webrtc nodejs 针对WebRTC的binding 关注量：2300+ https://github.com/node-webrtc/node-webrtc aiortc python 语言的WebRTC协议栈实现， 可以与pyav无缝对接 关注量：2800+ https://github.com/aiortc/aiortc webrtc-rs rust语言的WebRTC协议栈实现，发展较快。多个开源赞助，后期发展应该会不错 关注量：1700+ https://github.com/webrtc-rs/webrtc gstreamer webrtcbin gsteamer 中WebRTC的实现，可以适配各种硬件编解码和各种音视频输入以及输出协议 https://github.com/GStreamer Amzaon Kinesis Video SDK amazon开源的纯c的WebRTC实现，配合aws的视频分析产品服务。 关注量：700+ https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c flutter-webrtc flutter版本的WebRTC binding，随着flutter的快速发展关注比较多 关注量：2900+ https://github.com/flutter-webrtc reactnative-webrtc reactnative版本WebRTC binding 关注量：3800+ https://github.com/react-native-webrtc pion golang 版本WebRTC协议栈 关注量：8700+ https://github.com/pion/webrtc WebRTC-streamer 基于WebRTC的二次</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/nginx/ngx_http_js_module%E6%8C%87%E4%BB%A4%E5%8F%82%E8%80%83/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/nginx/ngx_http_js_module%E6%8C%87%E4%BB%A4%E5%8F%82%E8%80%83/</guid>
      <description>ngx_http_js_module 指令 Directives js_content js_import js_include js_path js_set 简单说，Nginx NJS 就是在 Nginx 的配置文件中 /etc/nginx/nginx.conf 增加几条指令 js_content，执行其中 JS 内容并输出 js_include，指定特定的文件内的 JS 代码处理请求 js_set，设置特定的 JS 变量 上面这是 ngx_http_js_module 的使用方法，然而 ngx_stream_js_module 也是基本一样的，就是多了几个指令而已 js_access，Nginx Access 阶段执行的 JS 内容 js_filter，Nginx 输出的数据过滤阶段执行的 JS 内容 js_include，指定特定的文件内的 JS 代码处理请求 js_preread，Nginx Preread 阶段执行的 JS 内容 js_set，设置特定的 JS 变量 js_content | Syntax: | **js_content** *function* | *module.function*; | | :&amp;mdash;&amp;mdash;- | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; | | Default: | — | | Context: | location, limit_except | Sets an njs function as a location content handler. Since 0.4.0, a module function can be referenced. 作为location 内容处理器（content handler），执行一个njs函数。 | Syntax: | **js_import** *module.js* | *export_name from module.js*; | | :&amp;mdash;&amp;mdash;- | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; | | Default: | — | | Context: | http | This directive appeared in version 0.4.0. Imports a module that implements location and variable handlers in njs. The export_name is used as a namespace to access module functions. If the export_name is not specified, the module name will be</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/posts/saas/%E6%9C%AA%E6%9D%A5saas%E6%96%B9%E5%90%91/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/posts/saas/%E6%9C%AA%E6%9D%A5saas%E6%96%B9%E5%90%91/</guid>
      <description>小而精，某个垂直领域做精 sso、权限集成，可以方便集成于第三方sso，权限系统。 统一的sso、权限管理和门户系统，丰富的接口和扩展性，可以集成企业私有sso，方便集成三方模块。 1+N模式：1为统一的sso、权限管理和门户系统，N为某个专业领域模块。 以用户为中心而非企业为中心，企业选择一个扩展性和开放性较高的门户模块，作为一个中心作为基石：包括登录，权限，功能菜单的管理，三方集成配置。 各个部门用户自己选择和采购符合自己部门的saas产品，少量配置集成到1个中心即可。 未来方向： 未来SaaS： 市场规模足够大：一百亿以上人民币的年度可重复收入 有标准化的产品。 可防御： 1). 软件使用费+交易佣金（抽成）/手续费，中国交易6‰，美国2~3% 2）未来10年人工智能SaaS 3）大型客户留存率要在80~90以上 4）中腰部客户提供标准化产品，定制转化为标准化 5）金额留存 6）开放平台和应用市场：第三方开发者应用 PLG</description>
    </item>
    
    <item>
      <title></title>
      <link>http://tietang.wang/readme/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>http://tietang.wang/readme/</guid>
      <description>主页：http://tietang.wang/
简书: http://www.jianshu.com/users/ae2ad10f3a37/latest_articles
简书微服务专题： http://www.jianshu.com/collection/3f476518d832</description>
    </item>
    
  </channel>
</rss>
