<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>技术学习 - 分类 - 开发者技术小屋</title>
        <link>https://www.developerhome.net/categories/%E6%8A%80%E6%9C%AF%E5%AD%A6%E4%B9%A0/</link>
        <description>技术学习 - 分类 - 开发者技术小屋</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 16 Sep 2021 01:24:29 &#43;0000</lastBuildDate><atom:link href="https://www.developerhome.net/categories/%E6%8A%80%E6%9C%AF%E5%AD%A6%E4%B9%A0/" rel="self" type="application/rss+xml" /><item>
    <title>我用Github Action为自己网站做了定时快照</title>
    <link>https://www.developerhome.net/archives/637/</link>
    <pubDate>Thu, 16 Sep 2021 01:24:29 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/637/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-637.jpg" referrerpolicy="no-referrer">
            </div><p>,&lsquo;2021-09-15 17:24:29&rsquo;,&rsquo;<em>本篇文章预计阅读时间 6 分钟，使用技术包含：</em>
<em>- Github Action</em>
<em>- Nodejs</em>
<em>- Puppeteer+Chromium</em></p>
<p>最近有空闲，做了一个有意思的小玩意，通过Github Action能定时对我的网站首页做截图并保存起来，具体是怎么实现的呢？这就不得不介绍一个非常实用的插件<strong>Puppeteer</strong> 了。</p>
<blockquote>
</blockquote>
<p>Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. Puppeteer runs headless by default, but can be configured to run full (non-headless) Chrome or Chromium.
摘自 puppeteer 官方介绍</p>
<p><strong>Puppeteer</strong> 是一个针对<strong>Chromium API</strong>进行封装的Node包，其可以通过几个简单的函数就实现对网页的操作，而且因为使用的是<strong>Chromium</strong>内核，所以使用<strong>React</strong>、<strong>Vue</strong>或<strong>AngularJS</strong>等前端渲染的页面，也能完全载入不受影响，可以说和我们用浏览器访问的效果是一样的。</p>
<h1></h1>
<h1 id="安装">安装</h1>
<p>安装puppeteer，安装时需要注意，是需要将对应版本的<strong>Chromium</strong>也安装的。</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm i puppeteer</span></span></code></pre></div></div>
<p>然后需要进入puppeteer包内安装下依赖，这样对应版本的chromium就安装上了。</p>]]></description>
</item>
<item>
    <title>centos7升级openssh以及openssl</title>
    <link>https://www.developerhome.net/archives/607/</link>
    <pubDate>Fri, 04 Jun 2021 17:08:22 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/607/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-607.jpg" referrerpolicy="no-referrer">
            </div><h1></h1>
<h1 id="背景">背景</h1>
<p>在开发过程中，需求甲方提供的服务器还是用的是<code>Centos7</code>系统，其<code>openssh</code>以及<code>openssl</code>版本还很低，安全方面有很多问题，而<code>yum</code>又无法升级，因此我们需要通过下载源码来安装，本文就一步一步教大家如何通过源码升级最新的<code>openssh</code>以及<code>openssl</code></p>
<h1 id="升级openssl">升级openssl</h1>
<p>首先，我们需要去<a href="https://www.openssl.org/source/" target="_blank" rel="noopener noreffer ">openssl官网</a>下载最新的版本源码包</p>
<blockquote>
</blockquote>
<p>作者当前最新稳定版本为 openssl-1.1.1k.tar.gz</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> /root
</span></span><span class="line"><span class="cl">curl -o openssl.tar.gz https://www.openssl.org/source/openssl-1.1.1k.tar.gz
</span></span><span class="line"><span class="cl">tar xzf openssl.tar.gz</span></span></code></pre></div></div>
<p>下载之后，我们进入目录</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> openssl-1.1.1k/</span></span></code></pre></div></div>
<p>查看下安装说明</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">more INSTALL</span></span></code></pre></div></div>
<p>现在我们先安装依赖</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">yum instal -y gcc zlib-devel pam pcre-devel perl autoconf</span></span></code></pre></div></div>
<blockquote>
</blockquote>
<p>如果不需要安装pam和zlib的话可以不安装这两个</p>]]></description>
</item>
<item>
    <title>使用openssl生成自签证书</title>
    <link>https://www.developerhome.net/archives/547/</link>
    <pubDate>Fri, 11 Dec 2020 14:03:11 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/547/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-547.jpg" referrerpolicy="no-referrer">
            </div><p>在grpc微服务集群中，我们常常使用自签证书来做服务加密，那如何生成自签证书呢？下面就使用<code>openSSL</code>来生成自签证书</p>
<p>首先我们需要生成服务私钥</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><pre tabindex="0"><code>openssl genrsa -out server.key 1024</code></pre></div>
<p>通过私钥生成证书签名文件</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><pre tabindex="0"><code>openssl req -new -key server.key -out server.csr</code></pre></div>
<p>现在按照提示，需要按提示输入<code>Country Name</code>
再按照提示，输入<code>State or Province Name</code>
按提示输入<code>Locality Name</code>
再输入<code>Organization Name</code>
再输入<code>Organizational Unit Name</code>
输入<code>Common Name</code>,此处可以写交互的域名
输入<code>Email Address</code>
之后会提示输入一个密码，对证书做保护
再按提示输入一个可选的公司名
这时可以看到生成了一个<code>server.csr</code></p>
<p>现在我们已经有了证书签名文件，再使用命令申请一个证书</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><pre tabindex="0"><code>openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 365</code></pre></div>
<p>这样就生成一个有效期一年的证书，也可以更改365来变更有效期</p>]]></description>
</item>
<item>
    <title>无标题</title>
    <link>https://www.developerhome.net/archives/537/</link>
    <pubDate>Fri, 24 Apr 2020 23:16:32 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/537/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-537.jpg" referrerpolicy="no-referrer">
            </div><p>有些事情，发生了就再也回不去了。。。</p>]]></description>
</item>
<item>
    <title>沉重哀悼在新冠病毒战疫中牺牲的烈士和逝去的同胞</title>
    <link>https://www.developerhome.net/archives/527/</link>
    <pubDate>Sat, 04 Apr 2020 17:58:14 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/527/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-527.jpg" referrerpolicy="no-referrer">
            </div><p></p>]]></description>
</item>
<item>
    <title>traefik2初体验</title>
    <link>https://www.developerhome.net/archives/423/</link>
    <pubDate>Wed, 01 Jan 2020 23:57:05 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/423/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-423.jpg" referrerpolicy="no-referrer">
            </div><p><code>traefik</code> 作为一款稳定的网关，一直被很多微服务使用，目前<code>traefik</code>升级到了 <strong>2</strong> 版本，增加了针对tcp的支持，因为更新时间不长，还没有针对新版的中文文档，新版的文档在 <a href="https://docs.traefik.io/" target="_blank" rel="noopener noreffer ">官网</a>，如果使用之前的版本，可以参考<a href="https://docs.traefik.cn" target="_blank" rel="noopener noreffer ">中文文档</a>，之前在搭建k8s集群时曾经尝试过使用<code>traefik 1+</code> 的版本，后来因为项目时间问题，最后放弃了使用k8s，也就没有仔细去体会<code>traefik</code>的强大功能。最近因为另一个项目有一些需求，计划使用traefik来做API网关，才翻出来看看，结果发现更新到了2.0版本，竟然支持TCP了，好了，废话不多说，开始体验一下新版的功能吧！</p>
<p>为了方便学习并去除系统差异，我将直接使用Docker来做环境，<code>traefik</code> 中支持 docker 模式，并能支持docker原生的swarm模式，下面我将统一使用docker-compose来做说明</p>
<p>首先我们先创建一个简单的例子，使用官方提供的 <code>containous/whoami</code> 来作为应用镜像，其可以显示请求的具体信息，以便一会做请求时来确认具体访问到的是哪个容器</p>
<p>下面我们来创建一个 <code>docker-compose.yml</code> 编排文件</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><pre tabindex="0"><code>version: &#34;3.4&#34;
services:
    traefik:
        image: traefik:v2.1
        ports:
            - &#34;80:80&#34;
            - &#34;8080:8080&#34;
        volumes: 
            - &#34;/var/run/docker.sock:/var/run/docker.sock&#34;
        command: 
            - &#34;--api.insecure=true&#34;
            - &#34;--api.dashboard=true&#34;
            - &#34;--accesslog=true&#34;
            - &#34;--providers.docker=true&#34;
            - &#34;--entrypoints.web.address=:80&#34;
    whoami:
        image: containous/whoami
        labels: 
            - &#34;traefik.http.routers.app.rule=Host(`localhost`)&#34;
            - &#34;traefik.http.routers.app.entrypoints=web&#34;</code></pre></div>
<p>上面这个编排文件中，我们开放traefik与docker的守护进程通信</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><pre tabindex="0"><code>volumes: 
    - &#34;/var/run/docker.sock:/var/run/docker.sock&#34;</code></pre></div>
<p>在启动命令中，我们首先开启了 <code>dashboard</code> 为了本地调试，我们使用 <code>insecure</code> 来开启不安全接口访问方便我们做本地调试</p>]]></description>
</item>
<item>
    <title>harbor中login提示401 Unauthorized解决</title>
    <link>https://www.developerhome.net/archives/386/</link>
    <pubDate>Thu, 25 Apr 2019 23:57:19 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/386/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-386.jpg" referrerpolicy="no-referrer">
            </div><p>这几天在做新公司的新集群架构，肯定要用到镜像仓库，之前只用过docker registry来启用一个仓库，管理挺不方便，所以这次决定使用harbor来搭建一个企业级的私有容器仓库。</p>
<p>harbor的具体搭建，其实挺简单的，去下载的官方的安装包，解压后，</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./prepare</span></span></code></pre></div></div>
<p>进行初始化配置，然后再install就行了</p>
<p>因为我搭建的Harbor仓库是在自己部署的Gitlab容器的服务器上，所以在最前端又用了nginx做了一个nginx做了反向代理，因为Harbor需要使用https，省事又自己弄了个自签证书</p>
<p>对于自签证书，现需要生成一个根证书，用于给自己做签名</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days <span class="m">365</span> -keyout root.key -out root.crt</span></span></code></pre></div></div>
<p>回车后按照提示输入国家、地区组织信息就行了</p>
<p>之后我们需要生成一个域名的证书签名，比如域名为 developerhome.net</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openssl req -newkey rsa:4096 -nodes -sha256 -keyout developerhome.net.key -out server.csr</span></span></code></pre></div></div>
<p>同样回车后按提示输入信息</p>]]></description>
</item>
<item>
    <title>浅谈flutter开发中使用rsa非对称加密</title>
    <link>https://www.developerhome.net/archives/308/</link>
    <pubDate>Sat, 30 Mar 2019 22:44:09 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/308/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-308.jpg" referrerpolicy="no-referrer">
            </div><p>之前一直在用RN开发应用，最近Flutter很火，就研究了下，而大家在开发与服务端做接口交互时，为了保证安全性，基本上都会使用加密方式来隐藏通讯内容，非对称加密方式，相比其他固定算法加密方式要安全很多，</p>
<p>非对称加密使用了私钥、公钥来分别对数据进行解密、加密操作，公钥做加密后的数据，只有私钥才能解密，因此会非常的安全。</p>
<p>Flutter使用的是Dart语言，Dart语言和Java非常的像，基本上会使用Java的程序员可以直接上手，部分查下就Ok了。</p>
<p>在Dart中，非对称加密可以使用 <a href="https://pub.dartlang.org/packages/encrypt" target="_blank" rel="noopener noreffer ">encrypt</a> 包，可以直接在 <code>pubspec.yaml</code> 中增加 <code>encrypt: ^2.0.0</code> 即可完成包的引用，当然，不要忘记执行 <code>packages get</code></p>
<p>做非对称加密，就必须要有公钥和私钥，特别注意一点，当前的 encrypt 为2.0.0版本，当前仅支持 PKCS#1文件格式的密钥</p>
<p>首先我们要生成私钥<code>bash\nopenssl genrsa -out private_key.pem 4096</code>这样就生成了一个私钥，而且就是PKCS#1格式的，如果有PKCS#8格式的，也可以用这个命令来转换为PKCS#1<code>bash\nopenssl pkcs8 -in pkcs8_private_key.pem -nocrypt -out pkcs1_private_key.pem</code></p>
<p>第一个坑，在flutter中，密钥文件直接存放在目录中是无法使用File读取到的，只能放在asset中才可以，所以需要在 <code>pubspec.yaml</code>中增加相关密钥文件才行，例如将密钥文件存放在与 <code>pubspec.yaml</code> 同级的目录 <code>keys</code> 下，则需要在 <code>pubspec.yaml</code> 中增加如下代码</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-dart">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-dart" data-lang="dart"><span class="line"><span class="cl"><span class="nl">assets:</span>
</span></span><span class="line"><span class="cl">  <span class="o">-</span> <span class="n">keys</span><span class="o">/</span><span class="n">private_key</span><span class="p">.</span><span class="n">pem</span>
</span></span><span class="line"><span class="cl">  <span class="o">-</span> <span class="n">keys</span><span class="o">/</span><span class="n">public_key</span><span class="p">.</span><span class="n">pem</span></span></span></code></pre></div></div>
<p>之后我们可以在代码中使用</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-java">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">String</span><span class="w"> </span><span class="n">publicKeyString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">rootBundle</span><span class="p">.</span><span class="na">loadString</span><span class="p">(</span><span class="err">&#39;</span><span class="n">keys</span><span class="o">/</span><span class="n">public_key</span><span class="p">.</span><span class="na">pem</span><span class="err">&#39;</span><span class="p">);</span></span></span></code></pre></div></div>
<p>来获取到公钥的文本，再通过</p>]]></description>
</item>
<item>
    <title>go-micro系列（一） —— go-micro介绍</title>
    <link>https://www.developerhome.net/archives/277/</link>
    <pubDate>Fri, 08 Mar 2019 18:52:48 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/277/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-277.jpg" referrerpolicy="no-referrer">
            </div><p>go-micro是一个go语言的微服务框架，可以大幅度的提升开发效率，并完成一套微服务的架构，其架构借用官方的图</p>
<h3 id="go-micro的架构图">go-micro的架构图</h3>
<p>其项目地址github: <a href="https://github.com/micro/go-micro" target="_blank" rel="noopener noreffer ">https://github.com/micro/go-micro</a></p>
<p>首先go-micro框架是一套微服务分布式的框架，其拥有以下特性：</p>
<ul>
<li>服务注册/发现</li>
<li>负载均衡</li>
<li>消息解码，并默认支持json以及protobuf</li>
<li>基于rpc的请求响应</li>
<li>异步的消息通讯</li>
<li>最后也是我觉得最牛的一点，接口可插拔，你可以不管用运行环境到底是使用的etcd或者consul来做服务发现，是使用http或rabbitmq做通讯，使用kafka做订阅还是用rabbitmq或者redis，是的，所有的一些都是可以插拔的，只要在运行时加入对应的启动参数，就可以使用对应的插件</li>
</ul>
<p>有人可能第一次接触<strong>微服务</strong>这个词，微服务的概念，可以理解为，讲一个单一应用，拆分成一套小型服务的方法，每个服务都做单独的部署，单独的开发，内部甚至可以使用不同的语言来实现。微服务的理念在传统的单机部署中并未见到明显的优势，但当越来越多的应用被部署到云中的时候，微服务的优势就立刻体现出来了，包括：</p>
<h3 id="单应用共用数据库而微服务每个服务使用不同或相同数据库">单应用共用数据库，而微服务每个服务使用不同或相同数据库</h3>
<ul>
<li>独立部署，每个服务独立去部署，独立运行于不同的进程，使得每个服务可以根据负载做部署数量调整</li>
<li>服务降级，当系统负载增高，需要对某些关键业务做优先增配时，可以对不关键、低级别的业务做服务降级，临时关闭某些服务来保证关键业务的稳定</li>
<li>功能单一，技术选型更广，由于微服务的功能相对单一，可以针对不同的微服务采用更适合的编程语言、数据库等，例如做朋友关系、二度好友功能就考虑使用neo4j的图形数据库，底层稳定性要求高的微服务则可以通过Java来开发，并发比较高的微服务则可以考虑使用Go来开发等等</li>
<li>后期维护隔离，对功能的后期开发升级不会影响整体的应用稳定性</li>
<li>单独测试，单独开发，可以使每个微服务由不同的团队去开发、去单独测试，增加了整体开发的速度</li>
<li>复用性，多个不同的应用可以直接复用某个微服务</li>
</ul>
<h3 id="单应用不同模块运行在单一进程中而微服务则每个服务运行于不同的进程">单应用不同模块运行在单一进程中，而微服务则每个服务运行于不同的进程</h3>
<p>而go-micro正是这样一个针对微服务开发的框架，其将所有热插拔的插件发布于<a href="https://github.com/micro/go-plugins/" target="_blank" rel="noopener noreffer ">go-plugins</a>，开发者可以根据需求引用，同时在运行时追加响应的运行参数即可启用插件。</p>
<p>好了，这章简单的介绍了go-micro这个框架以及微服务的概念，下一章讲开始go-micro的源码解析</p>]]></description>
</item>
<item>
    <title>SimpleConcurrentRequestClient —— 一个基于Guzzle的多请求管理终端</title>
    <link>https://www.developerhome.net/archives/257/</link>
    <pubDate>Tue, 11 Sep 2018 16:41:57 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/257/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-257.jpg" referrerpolicy="no-referrer">
            </div><p>SimpleConcurrentRequestClient，是一个针对多个请求做的管理终端，其是基于Guzzle的Pool来实现，并通过Promise方式来做回调。</p>
<p>使用SimpleConcurrentRequestClient可以很轻松的完成多个请求的管理，获取结果</p>
<p>安装可以使用composer</p>
<p><code>bash\ncomposer require jarod2011/taobao-concurrent-client</code></p>
<p>项目地址 <a href="https://github.com/jarod2011/SimpleConcurrentRequestClient" target="_blank" rel="noopener noreffer ">Github地址</a> ，感兴趣的朋友可以去github里查看</p>
<p>后续我将更新相关的使用说明</p>]]></description>
</item>
</channel>
</rss>
