Releases: ergo-services/ergo
Releases · ergo-services/ergo
v3.0.0
This version marks a significant milestone in the evolution of the Ergo Framework. The framework's design has been completely overhauled, and this version was built from the ground up. It includes:
- Significant API Improvements: The
gen.Process
,gen.Node
, andgen.Network
interfaces have been enhanced with numerous convenient methods. - A New Network Stack: This version introduces a completely new network stack for improved performance and flexibility. See https://github.com/ergo-services/benchmarks for the details
Alongside the release of Ergo Framework 3.0.0, new tools and an additional components library are also introduced:
- Tools (observer, saturn) https://github.com/ergo-services/tools
- Loggers (rotate, colored) - https://github.com/ergo-services/logger
- Meta (websocket) - https://github.com/ergo-services/meta
- Application (observer) - https://github.com/ergo-services/application
- Registrar (client Saturn) - https://github.com/ergo-services/registrar
- Proto (erlang23) - https://github.com/ergo-services/proto
Finally, we've published comprehensive documentation for the framework, providing detailed guides to assist you in leveraging all the capabilities of Ergo Framework effectively. Its available at https://docs.ergo.services.
v2.2.4
This release includes fixes:
- Fixed incorrect handling of
gen.SupervisorStrategyRestartTransient
restart strategy ingen.Supervisor
- Fixed missing
ServerBehavior
in [gen.Pool
,gen.Raft
,gen.Saga
,gen.Stage
,gen.TCP
,gen.UDP
,gen.Web
] behavior interfaces - Introduced the new tool for boilerplate code generation -
ergo
https://github.com/ergo-services/tools. You may read more information about this tool in our article with a great example https://blog.ergo.services/quick-start-1094d56d4e2
v2.2.3
v2.2.2
- Introduced
gen.Pool
. This behavior implements a basic design pattern with a pool of workers. All messages/requests received by the pool process are forwarded to the workers using the "Round Robin" algorithm. The worker process is automatically restarting on termination. See example here examples/genpool - Removed Erlang RPC support. A while ago Erlang has changed the way of handling this kind of request making this feature more similar to the regular
gen.Server
. So, there is no reason to keep supporting it. Use a regular way of messaging instead -gen.Server
. - Fixed issue #130 (
StartType
option ingen.ApplicationSpec
is ignored for the autostarting applications) - Fixed issue #143 (incorrect cleaning up the aliases belonging to the terminated process)
v2.2.1
- Now you can join your services made with Ergo Framework into a single cluster with transparent networking using our Cloud Overlay Network where they can connect to each other smoothly, no matter where they run - AWS, Azure or GCP, or anywhere else. All these connections are secured with end-to-end encryption. Read more in this article https://blog.ergo.services/cloud-overlay-network-3a133d47efe5. Here is an example of this feature in action examples/cloud
examples
moved to https://github.com/ergo-services/examples- Added support Erlang OTP/25
- Improved handling
nil
values for the registered types usingetf.RegisterType(...)
- Improved self-signed certificate generation
- Introduced
ergo.debug
option that enables extended debug information forlib.Log(...)
/lib.Warning(...)
- Fixed
gen.TCP
andgen.UDP
(missing callbacks) - Fixed ETF registering type with
etf.Pid
,etf.Alias
oretf.Ref
value types - Fixed Cloud client
- Fixed #117 (incorrect handshake process finalization)
- Fixed #139 (panic of the gen.Stage partition dispatcher)
v2.2.0
- Introduced
gen.Web
behavior. It implements Web API Gateway pattern is also sometimes known as the "Backend For Frontend" (BFF). See example examples/genweb - Introduced
gen.TCP
behavior - socket acceptor pool for TCP protocols. It provides everything you need to accept TCP connections and process packets with a small code base and low latency. Here is simple example examples/gentcp - Introduced
gen.UDP
- the same asgen.TCP
, but for UDP protocols. Example is here examples/genudp - Introduced Events. This is a simple pub/sub feature within a node - any
gen.Process
can become a producer by registering a new eventgen.Event
using methodgen.Process.RegisterEvent
, while the others can subscribe to these events usinggen.Process.MonitorEvent
. Subscriber process will also receivegen.MessageEventDown
if a producer process went down (terminated). This feature behaves in a monitor manner but only works within a node. You may also want to subscribe to a system event -node.EventNetwork
to receive event notification on connect/disconnect any peers. - Introduced Cloud Client - allows connecting to the cloud platform https://ergo.sevices. You may want to register your email there, and we will inform you about the platform launch day
- Introduced type registration for the ETF encoding/decoding. This feature allows you to get rid of manually decoding with
etf.TermIntoStruct
for the receiving messages. Register your type usingetf.RegisterType(...)
, and you will be receiving messages in a native type - Predefined set of errors has moved to the
lib
package - Updated
gen.ServerBehavior.HandleDirect
method (got extra argumentetf.Ref
to distinguish the requests). This change allows you to handle these requests asynchronously using methodgen.ServerProcess.Reply(...)
- Updated
node.Options
. Now it has fieldListeners
(typenode.Listener
). It allows you to start any number of listeners with custom options -Port
,TLS
settings, or customHandshake
/Proto
interfaces - Fixed build on 32-bit arch
- Fixed freezing on ARM arch #102
- Fixed problem with encoding negative int8
- Fixed #103 (there was an issue on interop with Elixir's GenStage)
- Fixed node stuck on start if it uses the name which is already taken in EPMD
- Fixed incorrect
gen.ProcessOptions.Context
handling
v2.1.1
v2.1.0
- Introduced compression feature support. Here are new methods and options to manage this feature:
gen.Process
:SetCompression(enable bool)
,Compression() bool
SetCompressionLevel(level int)
,CompressionLevel() int
SetCompressionThreshold(threshold int)
,CompressionThreshold() int
messages smaller than the threshold will be sent with no compression. The default compression threshold is 1024 bytes.
node.Options
:Compression
these settings are used as defaults for the spawning processes
- this feature will be ignored if the receiver is running on either the Erlang or Elixir node
- Introduced proxy feature support with end-to-end encryption.
node.Node
new methods:AddProxyRoute(...)
,RemoveProxyRoute(...)
ProxyRoute(...)
,ProxyRoutes()
NodesIndirect()
returns list of connected nodes via proxy connection
node.Options
:Proxy
for configuring proxy settings
- includes support (over the proxy connection): compression, fragmentation, link/monitor process, monitor node
- example examples/proxy.
- this feature is not available for the Erlang/Elixir nodes
- Introduced behavior
gen.Raft
. It's improved implementation of Raft consensus algorithm. The key improvement is using quorum under the hood to manage the leader election process and make the Raft cluster more reliable. This implementation supports quorums of 3, 5, 7, 9, or 11 quorum members. Here is an example of this feature examples/raft. - Introduced interfaces to customize network layer
Resolver
to replace EPMD routines with your solution (e.g., ZooKeeper or any other service registrar)Handshake
allows customizing authorization/authentication processProto
provides the way to implement proprietary protocols (e.g., for IoT area)
- Other new features:
gen.Process
new methods:NodeUptime()
,NodeName()
,NodeStop()
gen.ServerProcess
new method:MessageCounter()
shows how many messages have been handled by thegen.Server
callbacks
gen.ProcessOptions
new option:ProcessFallback
allows forward messages to the fallback process if the process mailbox is full. Forwarded messages are wrapped intogen.MessageFallback
struct. Related to issue #96.
gen.SupervisorChildSpec
andgen.ApplicationChildSpec
got optiongen.ProcessOptions
to customize options for the spawning child processes.
- Improved sending messages by etf.Pid or etf.Alias: methods
gen.Process.Send
,gen.ServerProcess.Cast
,gen.ServerProcess.Call
now returnnode.ErrProcessIncarnation
if a message is sending to the remote process of the previous incarnation (remote node has been restarted). - Introduced type
gen.EnvKey
for the environment variables - All spawned processes now have the
node.EnvKeyNode
variable to get access to thenode.Node
value. - Improved performance of local messaging (up to 8 times for some cases)
- Important
node.Options
has changed. Make sure to adjust your code. - Fixed issue #89 (incorrect handling of Call requests)
- Fixed issues #87, #88 and #93 (closing network socket)
- Fixed issue #96 (silently drops message if process mailbox is full)
- Updated minimal requirement of Golang version to 1.17 (go.mod)
- We still keep the rule Zero Dependencies