返回

微服务架构的前端实践

前端

最近看了字节跳动技术团队写的《前端微服务在字节跳动的打磨与应用》这一篇文章,对其中的服务注册和动态加载模块比较感兴趣,再加上之前做过一些类似的东西,所以就花了点时间做了一些简单的实践。希望可以帮助到大家。

我理解的微服务,本质上就是把一个大型的应用拆分为很多个独立的模块,每一个模块都有自己的职责,并且可以独立部署和运行。这样做的优点有很多,比如可以提高系统的可维护性、可扩展性和容错性。

在前端领域,微服务架构也可以发挥很大的作用。比如,我们可以把一个大型的前端应用拆分为很多个小的微服务,每个微服务负责一个特定的功能。这样做的优点是,可以提高代码的可重用性、降低维护成本,还可以提高系统的性能。

接下来,我们就通过一个简单的示例来演示如何使用微服务架构来构建一个前端应用。

首先,我们需要创建一个新的项目,并安装必要的依赖项。

mkdir my-app
cd my-app
npm init -y
npm install react react-dom

接下来,我们需要创建一个微服务,负责提供用户数据。

mkdir services
cd services
mkdir users
cd users
npm init -y
npm install express

users目录下,创建一个index.js文件,内容如下:

const express = require('express');

const app = express();

app.get('/users', (req, res) => {
  res.json([
    { id: 1, name: 'John Doe' },
    { id: 2, name: 'Jane Doe' },
  ]);
});

app.listen(3000, () => {
  console.log('Users service listening on port 3000');
});

接下来,我们需要创建一个微服务,负责提供商品数据。

cd ..
mkdir products
cd products
npm init -y
npm install express

products目录下,创建一个index.js文件,内容如下:

const express = require('express');

const app = express();

app.get('/products', (req, res) => {
  res.json([
    { id: 1, name: 'iPhone 13' },
    { id: 2, name: 'Samsung Galaxy S22' },
  ]);
});

app.listen(3001, () => {
  console.log('Products service listening on port 3001');
});

接下来,我们需要创建一个前端应用,来消费这些微服务。

cd ..
cd ..

mkdir frontend
cd frontend
npm init -y
npm install react react-dom axios

frontend目录下,创建一个index.js文件,内容如下:

import React, { useState, useEffect } from 'react';
import axios from 'axios';

const App = () => {
  const [users, setUsers] = useState([]);
  const [products, setProducts] = useState([]);

  useEffect(() => {
    axios.get('http://localhost:3000/users')
      .then(res => setUsers(res.data));

    axios.get('http://localhost:3001/products')
      .then(res => setProducts(res.data));
  }, []);

  return (
    <div>
      <h1>Users</h1>
      <ul>
        {users.map(user => <li key={user.id}>{user.name}</li>)}
      </ul>

      <h1>Products</h1>
      <ul>
        {products.map(product => <li key={product.id}>{product.name}</li>)}
      </ul>
    </div>
  );
};

export default App;

最后,我们需要运行这些微服务和前端应用。

cd services/users
npm start

cd ../products
npm start

cd ../..
cd frontend
npm start

现在,你就可以访问http://localhost:3000来查看这个前端应用了。

以上就是微服务架构的前端实践,希望对你有所帮助。